Использование NodaTime в Linux сбрасывает информацию о часовом поясе для покрытия по местному времени, используя DateTimeOffset - PullRequest
0 голосов
/ 11 декабря 2018

Я использую код здесь, чтобы обернуть функции NodaTime для преобразования в / из UTC / местного времени для веб-приложения .NET Core 2.1 .: https://www.joeaudette.com/blog/2016/06/23/cross-platform-timezone-handling-for-aspnet-core

Это прекрасно работает локально в Windows,но при развертывании на сервере Linux преобразование в местное время приводит к потере информации о часовом поясе (например, +13: 00 после даты и времени).

Я использую NodaTime 2.4.2.

Оболочка возвращает DateTime, который неявно преобразуется в DateTimeOffset.

Кто-нибудь знает, почему это может происходить?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Во-первых, я бы порекомендовал, если вы используете 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();
0 голосов
/ 18 декабря 2018

Не проблема NodaTime.Проблема, вызванная часовым поясом по умолчанию на разных серверах.

...