NodaTime: мгновенное до ZonedDateTime без перекошенного времени - PullRequest
1 голос
/ 24 марта 2020

У меня есть дата, которая хранится в наших бэкэнд-системах, например 2019-11-27T00:00:00. Теперь я хочу использовать эти данные, которые представляют дату и время независимо от часового пояса, как часть документа JSON, который поставляется внешним пользователям.

В настоящее время я использую тип времени Noda Instant для представления вышеуказанных значений.

InstantPattern.CreateWithInvariantCulture("yyyy-MM-ddTHH:mm:ss").Parse("2019-11-27T00:00:00").Value;

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

Например, вышеуказанное значение должно быть представлено в документе следующим образом:
Швеция : 2019-11-27T00:00:00+01:00
Финляндия : 2019-11-27T00:00:00+02:00

Причина, по которой я хочу это сделать, заключается в том, что дата и время в базе данных представляют время, когда событие происходит по местному времени для текущего потребителя данных. Примером может служить распродажа «Черной пятницы», которая начинается в полночь той страны, в которой она совершается, а не в полночь в UT C или аналогично. Установив информацию о часовом поясе в выходных данных JSON, я могу гарантировать, что потребители данных получат правильную информацию.

Все мои попытки использовать ZonedDateTime с момента Мгновенного момента считаются временем UT C, и вывод становится неправильным. Возможно, что-то мне не хватает, но я, к сожалению, застрял.

Мои вопросы:

  • Является ли NodaTime правильной библиотекой для этого?
  • Мгновенный правильный тип данных для значений базы данных?
  • является ли ZonedDateTime правильным способом работы?
  • как я могу преобразовать Мгновенный в любой другой тип, который может содержать информацию TimeZone?

Спасибо заранее.

1 Ответ

0 голосов
/ 24 марта 2020

Из комментариев выше некоторых замечательных людей я решил мою проблему с помощью

  • Используя Instant как тип из базы данных, чтобы другие разработчики не приняли его за локальную дату и время
  • Преобразование мгновенного значения в DateTime, а затем применение TimeZoneInfo.ConvertTimeBySystemTimeZoneId как раз к моменту создания вывода JSON.
...