Прочитать на английском

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


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

.NET предоставляет типы, представляющие даты, время и часовые пояса. В этой статье описываются эти типы.

Помимо базовой структуры DateTime .NET предоставляет следующие классы, поддерживающие работу с часовыми поясами:

  • TimeZoneInfo

    Используйте этот класс для работы с любым часовым поясом, предопределенным в системе, для создания новых часовых поясов, а также для упрощения преобразования дат и времени из одного часового пояса в другой. Для новой разработки используйте класс TimeZoneInfo вместо класса TimeZone.

  • DateTimeOffset

    Эта структура используется для работы с датами и временем, смещение которых (или разница) от UTC известно. Структура DateTimeOffset объединяет дату и время с учетом смещения этого времени от UTC. Из-за его связи с UTC отдельное значение даты и времени однозначно идентифицирует один момент времени. Это делает значение DateTimeOffset более переносимым с одного компьютера на другой, чем значение DateTime.

Следующие классы для поддержки работы с временем:

  • TimeSpan

    Используйте эту структуру для представления интервала времени, например истекшего времени или разницы между двумя датами.

  • TimeOnly

    Используйте эту структуру для представления времени без даты. Время представляет часы, минуты и секунды не определенного дня. TimeOnly имеет диапазон от 00:00:00.0000000 до 23:59:59.9999999. Этот тип можно использовать для замены DateTime и TimeSpan типов в коде при использовании этих типов для представления времени. Дополнительные сведения см. в разделе Использование структур DateOnly и TimeOnly.

    Важно!

    TimeOnly недоступно для .NET Framework.

  • TimeProvider

    Это базовый класс, предоставляющий абстракцию времени. Распространенный способ проверки текущего времени — использование DateTime.UtcNow или DateTimeOffset.UtcNow. Однако эти типы не обеспечивают никакого контроля над тем, что считается "сейчас". Почему вы хотите контролировать это? Тестируемость. Например, попробуйте написать приложение отслеживания событий, которое предоставляет напоминания за 1 день до события. Логика приложения заключается в том, чтобы каждый час проверять время события и оповещать пользователя, как только до события останется 24 часа. Когда вы пишете тесты для приложения, вы предоставите собственный тип, который упаковывает DateTimeOffset.UtcNow для тестирования этой логики, но теперь .NET предоставляет этот класс абстракции для вас.

    Дополнительные сведения см. в Что такое TimeProvider.

    Тип TimeProvider включен в .NET.

    Для .NET Framework и .NET Standard предоставляется пакетом NuGet Microsoft.Bcl.TimeProvider пакет NuGet.

Следующие классы предназначены для поддержки работы с датами:

  • DateOnly

    Используйте эту структуру при работе со значением, которое представляет только дату. Дата представляет весь день с начала дня до конца. DateOnly имеет диапазон 0001-01-01 до 9999-12-31. И этот тип представляет комбинацию месяца, дня и года без определенного времени. Если вы ранее использовали тип DateTime в коде для представления даты, которая не учитывала время, используйте этот тип в своем месте. Дополнительные сведения см. в разделе Использование структур DateOnly и TimeOnly.

    Важно!

    DateOnly недоступно для .NET Framework.

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

В этом разделе

Обзор часового пояса
Описывает терминологию, понятия и проблемы, связанные с созданием приложений с поддержкой часового пояса.

выбор между DateTime, DateTimeOffset, TimeSpan и TimeZoneInfo
Обсуждается, когда следует использовать DateTime, DateTimeOffsetи TimeZoneInfo типы при работе с данными даты и времени.

Поиск часовых поясов, определенных в локальной системе
Описывает перечисление часовых поясов, найденных в локальной системе.

Практическое руководство. Перечисление часовых поясов, присутствующих на компьютере
Содержит примеры, которые перечисляют часовые пояса, определенные в реестре компьютера, и позволяют пользователям выбирать предопределенный часовой пояс из списка.

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

Как создать экземпляр объекта TimeZoneInfo
Описывает создание экземпляра объекта TimeZoneInfo из локального системного реестра.

Инициализация объекта DateTimeOffset
Описывает способы создания экземпляра объекта DateTimeOffset и способы преобразования значения DateTime в значение DateTimeOffset.

Практическое руководство. Создание часовых поясов без правил корректировки
Описывается, как создать пользовательский часовой пояс, в котором не предусмотрен переход на летнее и обратно с него время.

Практическое руководство. Создание часовых поясов с помощью правил корректировки
Описывается, как создать индивидуальный часовой пояс, поддерживающий один или несколько переходов на летнее время и обратно.

Сохранение и восстановление часовых поясов
Описывает поддержку TimeZoneInfo сериализации и десериализации данных часового пояса и иллюстрирует некоторые сценарии, в которых эти функции можно использовать.

Практическое руководство. Сохранение часовых поясов в внедренном ресурсе
Описывает создание пользовательского часового пояса и сохранение сведений в файле ресурса.

Практическое руководство. Восстановление часовых поясов из внедренного ресурса
Описывает процесс создания экземпляра пользовательских часовых поясов, сохраненных в интегрированном файле ресурсов.

выполнение арифметических операций с датами и временем
Обсуждает проблемы, связанные с добавлением, вычитанием и сравнением значений DateTime и DateTimeOffset.

Как использовать часовые пояса в арифметических операциях с датой и временем
Описывает, как выполнять арифметику даты и времени, которая отражает правила корректировки часового пояса.

Преобразование между DateTime и DateTimeOffset
Описывает, как преобразовать значения между DateTime и DateTimeOffset.

Преобразование времени между часовых поясами
Описывает преобразование времени из одного часового пояса в другой.

Практическое руководство. Разрешение неоднозначных времен
Описывает, как устранить неопределённость времени, сопоставив его со стандартным временем часового пояса.

Как: Позволить пользователям разрешать неоднозначные времена
Описывает, как разрешить пользователю определить сопоставление между неоднозначным локальным временем и согласованным универсальным временем.

Ссылка

System.TimeZoneInfo