Как получить доступ к стандартным объектам времени в формате UTC и местному часовому поясуHow to: Access the predefined UTC and local time zone objects

Класс TimeZoneInfo предоставляет два свойства: Utc и Local, которые предоставляют коду доступ к предопределенным объектам часового пояса.The TimeZoneInfo class provides two properties, Utc and Local, that give your code access to predefined time zone objects. В этом разделе рассматривается порядок работы с объектами TimeZoneInfo, возвращаемыми этими свойствами.This topic discusses how to access the TimeZoneInfo objects returned by those properties.

Получение объекта TimeZoneInfo времени UTCTo access the Coordinated Universal Time (UTC) TimeZoneInfo object

  1. Для доступа к всеобщему скоординированному времени используйте свойство static (Shared в Visual Basic) TimeZoneInfo.Utc.Use the static (Shared in Visual Basic) TimeZoneInfo.Utc property to access Coordinated Universal Time.

  2. Вместо того, чтобы назначать объект TimeZoneInfo, возвращаемый свойством, в объектную переменную, продолжайте обращаться к времени в формате UTC через свойство TimeZoneInfo.Utc.Rather than assigning the TimeZoneInfo object returned by the property to an object variable, continue to access Coordinated Universal Time through the TimeZoneInfo.Utc property.

Получение местного часового поясаTo access the local time zone

  1. Используйте свойство static (Shared в Visual Basic) TimeZoneInfo.Local для доступа к часовому поясу локальной системы.Use the static (Shared in Visual Basic) TimeZoneInfo.Local property to access the local system time zone.

  2. Вместо того чтобы назначать объект TimeZoneInfo, возвращаемый свойством, в объектную переменную, продолжайте обращаться к местному часовому поясу через свойство TimeZoneInfo.Local.Rather than assigning the TimeZoneInfo object returned by the property to an object variable, continue to access the local time zone through the TimeZoneInfo.Local property.

ПримерExample

В следующем коде свойства TimeZoneInfo.Local и TimeZoneInfo.Utc используются для преобразования времени из восточного стандартного часового пояса США и Канады, а также для вывода названия часового пояса на консоль.The following code uses the TimeZoneInfo.Local and TimeZoneInfo.Utc properties to convert a time from the U.S. and Canadian Eastern Standard time zone, as well as to display the time zone name to the console.

   // 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);
   }
   ' 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

Необходимо всегда обращаться к локальному часовому поясу через свойство TimeZoneInfo.Local, а не назначать местный часовой пояс переменной объекта TimeZoneInfo.You should always access the local time zone through the TimeZoneInfo.Local property rather than assigning the local time zone to a TimeZoneInfo object variable. Аналогичным образом следует всегда обращаться к всеобщему скоординированному времени через свойство TimeZoneInfo.Utc, а не назначать часовой пояс в TimeZoneInfo объектной переменной.Similarly, you should always access Coordinated Universal Time through the TimeZoneInfo.Utc property rather than assigning the UTC zone to a TimeZoneInfo object variable. Это предотвращает невозможность сделать недействительным TimeZoneInfoную переменную объекта при вызове метода TimeZoneInfo.ClearCachedData.This prevents the TimeZoneInfo object variable from being invalidated by a call to the TimeZoneInfo.ClearCachedData method.

Компиляция кодаCompiling the code

Для этого примера требуются:This example requires:

  • , Что System пространство имен должно быть импортировано с помощью оператора using C# (требуется в коде).That the System namespace be imported with the using statement (required in C# code).

См. такжеSee also