Postupy: Přístup k předdefinovaných objektům místních časových zón a zóny UTC
Třída TimeZoneInfo poskytuje dvě vlastnosti, Utc a Local, které umožní vášemu kódu přístupovat k předdefinovaným objektům časových pásem. Toto téma popisuje, jak získat přístup k objektům TimeZoneInfo vráceným těmito vlastnostmi.
Přístup k objektu TimeZoneInfo koordinovaného světového času (standard UTC)
Použijte vlastnost static (Shared v jazyce Visual Basic) TimeZoneInfo.Utc pro přístup ke koordinovanému světovému času.
Namísto přiřazení objektu TimeZoneInfo vráceného vlastností proměnné objektu, pokračujte v přístupu ke koordinovanému světovému času prostřednictvím vlastnosti TimeZoneInfo.Utc.
Přístup k místnímu časovému pásmu
Použijte vlastnost static (Shared v jazyce Visual Basic) TimeZoneInfo.Local pro přístup k místnímu systémovému časovému pásmu.
Namísto přiřazení objektu TimeZoneInfo vráceného vlastností proměnné objektu, pokračujte v přístupu k místnímu časovému pásmu prostřednictvím vlastnosti TimeZoneInfo.Local.
Příklad
Následující kód používá vlastnosti TimeZoneInfo.Local a TimeZoneInfo.Utc, pro převod času z východního časového pásma pro USA a Kanadu, stejně jako k zobrazení názvu časového pásma v konzole.
' Create Eastern Standard Time value and TimeZoneInfo object
Dim estTime As Date = #01/01/2007 00:00:00#
Dim timeZoneName As String = "Eastern Standard Time"
Try
Dim est As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName)
' Convert EST to local time
Dim localTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local)
Console.WriteLine("At {0} {1}, the local time is {2} {3}.", _
estTime, _
est, _
localTime, _
IIf(TimeZoneInfo.Local.IsDaylightSavingTime(localTime), _
TimeZoneInfo.Local.DaylightName, _
TimeZoneInfo.Local.StandardName))
' Convert EST to UTC
Dim utcTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc)
Console.WriteLine("At {0} {1}, the time is {2} {3}.", _
estTime, _
est, _
utcTime, _
TimeZoneInfo.Utc.StandardName)
Catch e As TimeZoneNotFoundException
Console.WriteLine("The {0} zone cannot be found in the registry.", _
timeZoneName)
Catch e As InvalidTimeZoneException
Console.WriteLine("The registry contains invalid data for the {0} zone.", _
timeZoneName)
End Try
// Create Eastern Standard Time value and TimeZoneInfo object
DateTime estTime = new DateTime(2007, 1, 1, 00, 00, 00);
string timeZoneName = "Eastern Standard Time";
try
{
TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
// Convert EST to local time
DateTime localTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local);
Console.WriteLine("At {0} {1}, the local time is {2} {3}.",
estTime,
est,
localTime,
TimeZoneInfo.Local.IsDaylightSavingTime(localTime) ?
TimeZoneInfo.Local.DaylightName :
TimeZoneInfo.Local.StandardName);
// Convert EST to UTC
DateTime utcTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc);
Console.WriteLine("At {0} {1}, the time is {2} {3}.",
estTime,
est,
utcTime,
TimeZoneInfo.Utc.StandardName);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The {0} zone cannot be found in the registry.",
timeZoneName);
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("The registry contains invalid data for the {0} zone.",
timeZoneName);
}
Měli byste vždy přistupovat k místnímu časovému pásmu prostřednictvím vlastnosti TimeZoneInfo.Local spíše než přiřazením místního časového pásma proměnné objektu TimeZoneInfo. Obdobně byste měli vždy přistupovat k času UTC prostřednictvím proměnné TimeZoneInfo.Utc spíše než přiřazením pásma UTC k proměnné objektu TimeZoneInfo. Tím se zabrání proměnné objektu TimeZoneInfo před zrušením platnosti voláním metody TimeZoneInfo.ClearCachedData.
Probíhá kompilace kódu
Tento příklad vyžaduje:
Že bude do projektu přidán odkaz na System.Core.dll.
Že obor názvů System bude importován příkazem using (povinné v kódu jazyka C#).
Viz také
Úkoly
Postupy: Vytvoření instance objektu TimeZoneInfo
Koncepty
Zjištění časových pásem definovaných na místním systému