Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Nejednoznačný čas je čas, který se mapuje na více než jeden koordinovaný univerzální čas (UTC). Dochází k tomu, když se hodinový čas upraví zpět v čase, například při přechodu z letního času časového pásma na standardní čas. Při zpracování nejednoznačné doby můžete udělat jednu z těchto věcí:
Udělejte předpoklad o tom, jak se čas mapuje na UTC. Můžete například předpokládat, že nejednoznačný čas se vždy vyjadřuje ve standardním čase časového pásma.
Pokud nejednoznačný čas představuje položku dat zadanou uživatelem, můžete nechat na uživateli, aby vyřešil nejednoznačnost.
Toto téma ukazuje, jak vyřešit nejednoznačný čas za předpokladu, že představuje standardní čas časového pásma.
Převést nejednoznačný čas na standardní čas časového pásma
Zavolejte metodu IsAmbiguousTime, abyste zjistili, zda je čas nejednoznačný.
Pokud je čas nejednoznačný, odečtěte čas od objektu TimeSpan vráceného vlastností časového pásma BaseUtcOffset .
Zavolejte metodu
static(Sharedv jazyce Visual Basic .NET) SpecifyKind k nastavení vlastnosti Kind na hodnotu data a času UTC DateTimeKind.Utc.
Příklad
Následující příklad ukazuje, jak převést nejednoznačný čas na UTC za předpokladu, že představuje standardní čas místního časového pásma.
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
Příklad se skládá z metody s názvem ResolveAmbiguousTime, která určuje, zda je hodnota DateTime do ní předaná nejednoznačná. Pokud je hodnota nejednoznačná, metoda vrátí DateTime hodnotu, která představuje odpovídající čas UTC. Metoda tento převod zpracovává odečtením hodnoty vlastnosti místního časového pásma BaseUtcOffset z místního času.
Obvykle se nejednoznačný čas zpracovává voláním metody GetAmbiguousTimeOffsets pro načtení pole objektů TimeSpan, které obsahují možné časové posuny UTC pro tento nejednoznačný čas. Tento příklad ale předpokládá, že nejednoznačný čas by měl být vždy mapován na standardní čas časového pásma. Vlastnost BaseUtcOffset vrátí posun mezi UTC a standardním časem časového pásma.
V tomto příkladu jsou všechny odkazy na místní časové pásmo provedeny prostřednictvím TimeZoneInfo.Local vlastnosti; místní časové pásmo není nikdy přiřazeno k proměnné objektu. Toto je doporučený postup, protože volání TimeZoneInfo.ClearCachedData metody zneplatňuje všechny objekty, ke kterým je přiřazeno místní časové pásmo.