Поделиться через


Практическое руководство. Доступ к предварительно определенным объектам UTC и объектам местных часовых поясов

Класс TimeZoneInfo имеет свойства Utc и Local, обеспечивающие доступ к предопределенным объектам часовых поясов. В этом разделе рассматривается порядок работы с объектами TimeZoneInfo, возвращаемыми этими свойствами.

Получение объекта TimeZoneInfo времени UTC

  1. Для получения времени в формате UTC следует использовать статическое (static, Shared в языке Visual Basic) свойство TimeZoneInfo.Utc.

  2. Вместо того чтобы сохранять возвращаемый этим свойством объект TimeZoneInfo в объектной переменной, следует работать со временем в формате UTC с помощью свойства TimeZoneInfo.Utc.

Получение местного часового пояса

  1. Для получения часового пояса локальной системы следует использовать статическое (static, Shared в языке Visual Basic) свойство TimeZoneInfo.Local.

  2. Вместо того чтобы сохранять возвращаемый этим свойством объект TimeZoneInfo в объектной переменной, следует работать с местным часовым поясом с помощью свойства TimeZoneInfo.Local.

Пример

В следующем коде свойства TimeZoneInfo.Local и TimeZoneInfo.Utc используются для преобразования времени из американско-канадского восточного стандартного часового пояса, а также для вывода названия часового пояса на консоль.

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

Вместо того чтобы сохранять местный часовой пояс в объектной переменной TimeZoneInfo, работать с местным часовым поясом всегда следует через свойство TimeZoneInfo.Local. Подобным образом, вместо того чтобы сохранять часовой пояс UTC в объектной переменной TimeZoneInfo, работать со временем в формате UTC всегда следует с помощью свойства TimeZoneInfo.Utc. Это исключает присвоение объектной переменной TimeZoneInfo недопустимого значения при вызове метода TimeZoneInfo.ClearCachedData.

Компиляция кода

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

  • Чтобы ссылка на System.Core.dll была добавлена в проект.

  • Чтобы пространство имен System было импортировано с помощью оператора using (обязательно в коде C#).

См. также

Задачи

Практическое руководство. Создание экземпляра объекта TimeZoneInfo

Основные понятия

Поиск часового пояса, заданного в локальной системе

Другие ресурсы

Даты, время и часовые пояса