Nasıl yapılır: Belirsiz saatleri çözme
Belirsiz bir saat, birden fazla Eşgüdümlü Evrensel Saat 'e (UTC) eşlenen bir zamandır. Saat saati, örneğin bir saat diliminin gün ışığından standart saatine geçiş sırasında olduğu gibi zamanda geri ayarlandığında oluşur. Belirsiz bir zamanı işlerken aşağıdakilerden birini yapabilirsiniz:
Saatin UTC'ye nasıl eş olduğu hakkında bir varsayımda bulunın. Örneğin, belirsiz bir saatin her zaman saat diliminin standart saatinde ifade edildiği varsayılabilir.
Belirsiz saat, kullanıcının girdiği bir veri öğesiyse, belirsizliği çözmek için bunu kullanıcıya bırakabilirsiniz.
Bu konuda, saat diliminin standart saatini temsil ettiğini varsayarak belirsiz bir saatin nasıl çözüleceğini gösterir.
Belirsiz bir saati bir saat diliminin standart saatiyle eşlemek için
IsAmbiguousTime Saatin belirsiz olup olmadığını belirlemek için yöntemini çağırın.
Saat belirsizse, saat diliminin BaseUtcOffset özelliği tarafından döndürülen nesneden TimeSpan saat çıkarın.
UTC tarih ve saat değerinin
static
özelliğini DateTimeKind.Utcolarak ayarlamak için (Shared
Visual Basic .NET'te) SpecifyKind yöntemini çağırınKind.
Örnek
Aşağıdaki örnekte, yerel saat diliminin standart saatini temsil ettiği varsayılarak belirsiz bir saatin UTC'ye nasıl dönüştürüldüğü gösterilmektedir.
private static DateTime ResolveAmbiguousTime(DateTime ambiguousTime)
{
// Time is not ambiguous
if (!TimeZoneInfo.Local.IsAmbiguousTime(ambiguousTime))
{
return ambiguousTime;
}
// Time is ambiguous
else
{
DateTime utcTime = DateTime.SpecifyKind(ambiguousTime - TimeZoneInfo.Local.BaseUtcOffset,
DateTimeKind.Utc);
Console.WriteLine("{0} local time corresponds to {1} {2}.",
ambiguousTime, utcTime, utcTime.Kind.ToString());
return utcTime;
}
}
Private Function ResolveAmbiguousTime(ambiguousTime As Date) As Date
' Time is not ambiguous
If Not TimeZoneInfo.Local.IsAmbiguousTime(ambiguousTime) Then
Return TimeZoneInfo.ConvertTimeToUtc(ambiguousTime)
' Time is ambiguous
Else
Dim utcTime As Date = DateTime.SpecifyKind(ambiguousTime - TimeZoneInfo.Local.BaseUtcOffset, DateTimeKind.Utc)
Console.WriteLine("{0} local time corresponds to {1} {2}.", ambiguousTime, utcTime, utcTime.Kind.ToString())
Return utcTime
End If
End Function
Örnek, ona geçirilen değerin DateTime belirsiz olup olmadığını belirleyen adlı ResolveAmbiguousTime
bir yöntemden oluşur. Değer belirsizse, yöntemi karşılık gelen UTC saatini temsil eden bir DateTime değer döndürür. yöntemi, yerel saat dilimi BaseUtcOffset özelliğinin değerini yerel saatten çıkararak bu dönüştürmeyi işler.
Genellikle belirsiz bir saat, belirsiz saatin olası UTC uzaklıklarını içeren bir nesne dizisi TimeSpan almak için yöntemi çağrılarak GetAmbiguousTimeOffsets işlenir. Ancak bu örnek, belirsiz bir saatin her zaman saat diliminin standart saatiyle eşlenmesi gerektiği şeklinde rastgele bir varsayımda bulunur. özelliği UTC BaseUtcOffset ile saat diliminin standart saati arasındaki uzaklığı döndürür.
Bu örnekte, yerel saat dilimine yapılan tüm başvurular özelliği aracılığıyla TimeZoneInfo.Local yapılır; yerel saat dilimi hiçbir zaman bir nesne değişkenine atanmamaktadır. Yöntemine yapılan bir çağrı, yerel saat diliminin TimeZoneInfo.ClearCachedData atandığı tüm nesneleri geçersiz kıldığından bu önerilen bir uygulamadır.