Нет, в библиотеке базовых классов. NET нет встроенного типа, подобного ZonedDateTime
.
Как отмечали другие, если вы ищете временную модель, похожую на Java Joda Time или java.time
, тогда рассмотрите возможность использования Noda Time . Он имеет структуру ZonedDateTime
.
Если вы не хотите использовать Noda Time, и вам действительно нужен один объект, содержащий смещение даты, времени и часового пояса, тогда предложенный вами подход структуры с полями DateTimeOffset
и TimeZoneInfo
имеет смысл. Вот несколько дополнительных советов:
Важно, чтобы вы спроектировали это как неизменяемую структуру, другими словами - принимайте входные данные только от конструктора. Выставляйте только средства получения свойств над полями. Не раскрывайте поля напрямую и не предоставляйте сеттеры для свойств.
Знайте, как вы хотите обрабатывать ситуации, когда смещение DateTimeOffset
равно не правильное смещение для данного часового пояса. Вы можете настроить его или создать исключение.
Возможно, вам потребуется предоставить настраиваемую сериализацию для вашей структуры, и вам может потребоваться деконструировать ее при сохранении в база данных. В любом случае оставьте только строку Id
компонента TimeZoneInfo
. Не пытайтесь сериализовать или сохранить весь объект.
Тем не менее, вы, возможно, захотите пересмотреть, нужен ли вам такой объект. Во многих случаях достаточно простого использования DateTimeOffset
и TimeZoneInfo
по отдельности.