Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Niejednoznaczny czas to czas, który odnosi się do więcej niż jednego koordynowanego czasu uniwersalnego (UTC). Występuje, gdy czas zegara jest dostosowywany z powrotem w czasie, na przykład podczas przejścia ze strefy czasowej czas letni do czasu standardowego. Podczas obsługi niejednoznacznego czasu można wykonać jedną z następujących czynności:
Przyjmij założenie, jak czas jest mapowany na UTC. Można na przykład założyć, że niejednoznaczny czas jest zawsze wyrażony w standardowym czasie strefy czasowej.
Jeśli niejednoznaczny czas jest elementem danych wprowadzonym przez użytkownika, możesz pozostawić go użytkownikowi, aby rozwiązać niejednoznaczność.
W tym temacie pokazano, jak rozwiązać niejednoznaczny czas, zakładając, że reprezentuje standardowy czas strefy czasowej.
Aby dopasować niejednoznaczny czas do czasu standardowego danej strefy czasowej
Wywołaj metodę , IsAmbiguousTime aby określić, czy czas jest niejednoznaczny.
Jeśli czas jest niejednoznaczny, odejmij ten czas od obiektu TimeSpan, który został zwrócony przez właściwość BaseUtcOffset strefy czasowej.
Wywołaj metodę
static(Sharedw języku Visual Basic .NET) SpecifyKind, aby ustawić właściwość wartości Kind daty i godziny UTC na DateTimeKind.Utc.
Przykład
W poniższym przykładzie pokazano, jak przekonwertować niejednoznaczny czas na UTC, zakładając, że reprezentuje on czas standardowy lokalnej strefy czasowej.
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
Przykład składa się z metody o nazwie ResolveAmbiguousTime , która określa, czy DateTime przekazana do niej wartość jest niejednoznaczna. Jeśli wartość jest niejednoznaczna, metoda zwraca wartość reprezentującą DateTime odpowiedni czas UTC. Metoda obsługuje tę konwersję, odejmując wartość właściwości lokalnej strefy czasowej BaseUtcOffset z czasu lokalnego.
Zazwyczaj niejednoznaczny czas obsługiwany jest przez wywołanie metody GetAmbiguousTimeOffsets w celu pobrania tablicy obiektów TimeSpan, które zawierają możliwe przesunięcia czasu UTC dla tego niejednoznacznego czasu. Jednak ten przykład przyjmuje arbitralne założenie, że czas niejednoznaczny powinien być zawsze przypisany do standardowego czasu strefy czasowej. Właściwość BaseUtcOffset zwraca przesunięcie między godziną UTC a czasem standardowym strefy czasowej.
W tym przykładzie wszystkie odwołania do lokalnej strefy czasowej są wykonywane za pośrednictwem TimeZoneInfo.Local właściwości ; lokalna strefa czasowa nigdy nie jest przypisana do zmiennej obiektu. Jest to zalecana praktyka, ponieważ wywołanie TimeZoneInfo.ClearCachedData metody unieważnia wszystkie obiekty, do których przypisano lokalną strefę czasową.