Sdílet prostřednictvím


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)

  1. Použijte vlastnost static (Shared v jazyce Visual Basic) TimeZoneInfo.Utc pro přístup ke koordinovanému světovému času.

  2. 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

  1. 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.

  2. 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

Další zdroje

Data, časy a časových pásem