Есть ли ZonedDateTime (Java) в Net? - PullRequest
2 голосов
/ 09 июля 2020

Лучший эквивалент, который я нашел, - это комбинация DateTimeOffset + TimeZoneInfo. Это лучший подход - создать структуру, содержащую оба этих класса, и обеспечить их согласованность?

1 Ответ

2 голосов
/ 09 июля 2020

Нет, в библиотеке базовых классов. NET нет встроенного типа, подобного ZonedDateTime.

Как отмечали другие, если вы ищете временную модель, похожую на Java Joda Time или java.time, тогда рассмотрите возможность использования Noda Time . Он имеет структуру ZonedDateTime.

Если вы не хотите использовать Noda Time, и вам действительно нужен один объект, содержащий смещение даты, времени и часового пояса, тогда предложенный вами подход структуры с полями DateTimeOffset и TimeZoneInfo имеет смысл. Вот несколько дополнительных советов:

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

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

  • Возможно, вам потребуется предоставить настраиваемую сериализацию для вашей структуры, и вам может потребоваться деконструировать ее при сохранении в база данных. В любом случае оставьте только строку Id компонента TimeZoneInfo. Не пытайтесь сериализовать или сохранить весь объект.

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

...