Во-первых, я бы порекомендовал, если вы используете Noda Time, вы используете его как можно шире, а не в маленьких карманах, как это.Чем меньше у вас кода, использующего типы BCL (DateTime
и т. Д.), Тем лучше.
Однако проблема здесь не в Noda Time, а в преобразовании DateTime
в DateTimeOffset
.
Код, который вы получили, преобразует LocalDateTime
в DateTime
с Kind
в Unspecified
.Как отмечено в комментариях, вы на самом деле используете DateTimeOffset
в своем коде.Неявное преобразование из DateTime
в DateTimeOffset
будет выполнять преобразование часового пояса с использованием системного часового пояса по умолчанию, когда Kind
имеет значение Unspecified
или Local
.(Такое неявное использование окружающего контекста является тем, что Noda Time пытается предотвратить.) Похоже, ваш сервер Linux имеет один часовой пояс системы, а сервер Windows - другой.
Если выЕсли вы хотите сохранить DateTimeOffset
часть вашего кода, но точно представлять момент в определенном часовом поясе, самое простое решение - изменить методы для возврата DateTimeOffset
и просто вызвать ZonedDateTime.ToDateTimeOffset
в конце ConvertToLocalTime
:
return new ZonedDateTime(instant, timeZone).ToDateTimeOffset();