Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс TimeZoneInfo упрощает создание приложений с поддержкой часового пояса. Класс TimeZone поддерживает работу с локальным часовом поясом и согласованным универсальным временем (UTC). Класс TimeZoneInfo поддерживает обе эти зоны, а также любой часовой пояс, для которого информация предопределена в реестре. Можно также использовать TimeZoneInfo для определения пользовательских часовых поясов, о которых системе нет информации.
Основные сведения о часовом поясе
Часовой пояс — это географический регион, в котором используется то же время. Обычно, но не всегда, смежные часовые пояса отличаются на один час. Время в любом из часовых поясов мира может быть выражено как смещение от координированного универсального времени (UTC).
Многие часовые пояса мира поддерживают летнее время. Переход на летнее время старается максимизировать количество светлых часов, переводя время на один час вперед весной или в начале лета и возвращаясь к нормальному (или стандартному) времени в конце лета или осенью. Эти изменения в и из стандартного времени называются правилами корректировки.
Переход на летнее время и с возвращением к стандартному времени в определенном часовом поясе можно определить фиксированными или плавающими правилами корректировки. Фиксированное правило корректировки задает определенную дату, в которой происходит переход на летнее время или с летнего времени. Например, переход с летнего времени на стандартное время, которое происходит каждый год 25 октября, следует фиксированному правилу корректировки. Гораздо чаще используются плавающие правила корректировки, которые задают определенный день определенной недели определенного месяца для перехода на летнее время или с летнего времени. Например, переход с стандартного времени на летнее время, которое происходит в третье воскресенье марта, следует правилу с плавающей корректировкой.
Для часовых поясов, поддерживающих правила корректировки, переход на летнее время создает два типа аномальных времен: недопустимое время и неоднозначное время. Недопустимое время — это несуществующее время, созданное переходом с стандартного времени на летнее время. Например, если этот переход происходит в определенный день в 2:00 утра и вызывает изменение времени на 3:00 утра, каждый интервал времени между 2:00 утра и 2:59:59 A.M. недопустим. Неоднозначное время — это время, которое можно сопоставить с двумя разными временем в одном часовом поясе. Он создается путем перехода с летнего времени на стандартное время. Например, если этот переход происходит в определенный день в 2:00 утра и вызывает изменение времени на 1:00 утра, каждый интервал времени между 1:00 утра и 1:59:59 A.M. может быть интерпретирован как стандартное время или летнее время.
Терминология часового пояса
В следующей таблице определяются термины, часто используемые при работе с часовыми поясами и разработке приложений с поддержкой часового пояса.
Срок | Определение |
---|---|
Правило корректировки | Правило, определяющее, когда происходит переход от стандартного времени к летнему времени и обратно из летнего времени в стандартное время. Каждое правило корректировки имеет дату начала и окончания, которая определяет, когда правило находится на месте (например, правило корректировки выполняется с 1 января 1986 г. по 31 декабря 2006 г.), разностное значение (время, на которое изменяется стандартное время в результате применения правила корректировки), а также сведения о конкретной дате и времени, в течение которого переходы происходят в течение периода корректировки. Переходы могут следовать либо фиксированному правилу, либо плавающему правилу. |
Неоднозначное время | Время, которое можно отобразить на два разных момента в одном часовом поясе. Это происходит, когда время часов настраивается обратно во времени, например во время перехода с летнего времени часового пояса на стандартное время. Например, если этот переход происходит в определенный день в 2:00 утра и вызывает изменение времени на 1:00 утра, каждый интервал времени между 1:00 утра и 1:59:59 A.M. может быть интерпретирован как стандартное время или летнее время. |
Исправлено правило | Правило корректировки, которое устанавливает определенную дату для перехода на летнее время или обратно. Например, переход с летнего времени на стандартное время, которое происходит каждый год 25 октября, следует фиксированному правилу корректировки. |
Плавающее правило | Правило корректировки, задающее определенный день определенной недели определенного месяца для перехода на летнее время или возвращения к стандартному времени. Например, переход с стандартного времени на летнее время, которое происходит в третье воскресенье марта, следует правилу с плавающей корректировкой. |
Недопустимое время | Несуществующее время, которое является артефактом перехода с стандартного времени на летнее время. Это происходит, когда время часов настраивается вперед во времени, например во время перехода с стандартного времени часового пояса на летнее время. Например, если этот переход происходит в определенный день в 2:00 утра и вызывает изменение времени на 3:00 утра, каждый интервал времени между 2:00 утра и 2:59:59 A.M. недопустим. |
Время перехода | Сведения об изменении определенного времени, например изменение времени с летнего времени на стандартное время или наоборот, в определенном часовом поясе. |
Часовые пояса и класс TimeZoneInfo
В .NET TimeZoneInfo объект представляет часовой пояс. Класс TimeZoneInfo включает GetAdjustmentRules метод, возвращающий массив TimeZoneInfo.AdjustmentRule объектов. Каждый элемент этого массива содержит сведения о переходе на летнее время и из них в определенный период времени. (Для часовых поясов, не поддерживающих летнее время, метод возвращает пустой массив.) У каждого TimeZoneInfo.AdjustmentRule объекта есть DaylightTransitionStart свойство, DaylightTransitionEnd определяющее определенную дату и время перехода на летнее время и с летнего времени. Свойство IsFixedDateRule указывает, является ли переход фиксированным или плавающим.
Платформа .NET использует сведения часового пояса, предоставляемые операционной системой Windows и хранящиеся в реестре. Из-за количества часовых поясов земли в реестре представлены не все существующие часовые пояса. Кроме того, так как реестр представляет собой динамическую структуру, предопределенные часовые пояса можно добавить или удалить из него. Наконец, реестр не обязательно содержит исторические данные часового пояса. Например, в Windows XP реестр содержит данные только о одном наборе корректировки часового пояса. Windows Vista поддерживает динамические данные часового пояса, что означает, что один часовой пояс может иметь несколько правил корректировки, которые применяются к определенным интервалам года. Однако большинство часовых поясов, определенных в реестре Windows Vista и поддерживающие летнее время, имеют только одно или два предопределенных правила корректировки.
Зависимость TimeZoneInfo класса от реестра означает, что приложение, поддерживающее часовой пояс, не может быть уверены, что определенный часовой пояс определен в реестре. В результате попытка создать экземпляр определенного часового пояса (кроме локального часового пояса или часового пояса, представляющего UTC), должна использовать обработку исключений. Он также должен предоставить некоторый метод, позволяющий приложению продолжать работу, если обязательный TimeZoneInfo объект не может быть создан из реестра.
Чтобы решить проблему отсутствия необходимого часового пояса, класс TimeZoneInfo включает метод CreateCustomTimeZone, который можно использовать для создания пользовательских часовых поясов, не найденных в реестре. Дополнительные сведения о создании пользовательского часового пояса см. в статье "Практическое руководство. Создание часовых поясов без правил корректировки и практическое руководство. Создание часовых поясов с правилами корректировки". Кроме того, можно использовать ToSerializedString метод для преобразования созданного часового пояса в строку и сохранения его в хранилище данных (например, в базе данных, текстовом файле, реестре или ресурсе приложения). Затем можно использовать FromSerializedString метод для преобразования этой строки обратно в TimeZoneInfo объект. Дополнительные сведения см. в статье "Практическое руководство. Сохранение часовых поясов в внедренном ресурсе и практическое руководство. Восстановление часовых поясов из внедренного ресурса".
Так как каждый часовой пояс характеризуется базовым смещением от UTC, а также смещением из UTC, которое отражает все существующие правила корректировки, время в одном часовом поясе можно легко преобразовать в время в другом часовом поясе. Для этого TimeZoneInfo объект включает несколько методов преобразования, в том числе:
ConvertTimeFromUtc, который преобразует UTC в время в заданном часовом поясе.
ConvertTimeToUtc, который преобразует время в указанном часовом поясе в формате UTC.
ConvertTime, который преобразует время в одном заданном часовом поясе в время в другом заданном часовом поясе.
ConvertTimeBySystemTimeZoneId, который использует идентификаторы часового пояса TimeZoneInfo (вместо объектов) в качестве параметров для преобразования времени в одном заданном часовом поясе в время в другой назначенный часовой пояс.
Дополнительные сведения о преобразовании времени между часовых поясами см. в разделе "Преобразование времени между часовых поясов".