Обучение
Модуль
Выбор правильного типа данных в коде на C# - Training
Выберите правильный тип данных для кода из нескольких основных типов, используемых в C#.
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
.NET предоставляет типы, представляющие даты, время и часовые пояса. В этой статье описываются эти типы.
Помимо базовой структуры DateTime .NET предоставляет следующие классы, поддерживающие работу с часовыми поясами:
Используйте этот класс для работы с любым часовым поясом, предопределенным в системе, для создания новых часовых поясов, а также для упрощения преобразования дат и времени из одного часового пояса в другой. Для новой разработки используйте класс TimeZoneInfo вместо класса TimeZone.
Эта структура используется для работы с датами и временем, смещение которых (или разница) от UTC известно. Структура DateTimeOffset объединяет дату и время с учетом смещения этого времени от UTC. Из-за его связи с UTC отдельное значение даты и времени однозначно идентифицирует один момент времени. Это делает значение DateTimeOffset более переносимым с одного компьютера на другой, чем значение DateTime.
Следующие классы для поддержки работы с временем:
Используйте эту структуру для представления интервала времени, например истекшего времени или разницы между двумя датами.
Используйте эту структуру для представления времени без даты. Время представляет часы, минуты и секунды не определенного дня.
TimeOnly
имеет диапазон от 00:00:00.0000000
до 23:59:59.9999999
. Этот тип можно использовать для замены DateTime
и TimeSpan
типов в коде при использовании этих типов для представления времени. Дополнительные сведения см. в разделе Использование структур DateOnly и TimeOnly.
Важно!
TimeOnly недоступно для .NET Framework.
Это базовый класс, предоставляющий абстракцию времени. Распространенный способ проверки текущего времени — использование DateTime.UtcNow
или DateTimeOffset.UtcNow
. Однако эти типы не обеспечивают никакого контроля над тем, что считается "сейчас". Почему вы хотите контролировать это? Тестируемость. Например, попробуйте написать приложение отслеживания событий, которое предоставляет напоминания за 1 день до события. Логика приложения заключается в том, чтобы каждый час проверять время события и оповещать пользователя, как только до события останется 24 часа. Когда вы пишете тесты для приложения, вы предоставите собственный тип, который упаковывает DateTimeOffset.UtcNow
для тестирования этой логики, но теперь .NET предоставляет этот класс абстракции для вас.
Дополнительные сведения см. в Что такое TimeProvider.
Тип TimeProvider
включен в .NET.
Для .NET Framework и .NET Standard
Следующие классы предназначены для поддержки работы с датами:
Используйте эту структуру при работе со значением, которое представляет только дату. Дата представляет весь день с начала дня до конца.
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.
Преобразование времени между часовых поясами
Описывает преобразование времени из одного часового пояса в другой.
Практическое руководство. Разрешение неоднозначных времен
Описывает, как устранить неопределённость времени, сопоставив его со стандартным временем часового пояса.
Как: Позволить пользователям разрешать неоднозначные времена
Описывает, как разрешить пользователю определить сопоставление между неоднозначным локальным временем и согласованным универсальным временем.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Модуль
Выбор правильного типа данных в коде на C# - Training
Выберите правильный тип данных для кода из нескольких основных типов, используемых в C#.
Документация
Дополнительные сведения: Практическое руководство. Использование часовых поясов в арифметике даты и времени
Сравнение типов, связанных с датой и временем - .NET
Сведения о различиях между типами DateTime, DateOnly, DateTimeOffset, TimeSpan, TimeOnly и TimeZoneInfo для представления сведений о дате и времени в .NET.
Преобразование времени из одного часового пояса в другой - .NET
Узнайте, как преобразовать время между одним часовыми поясами в другой в .NET. Кроме того, узнайте, как преобразовать значения DateTimeOffset с ограниченными возможностями часового пояса.