Различные часовые пояса для веб-приложения Azure - PullRequest
0 голосов
/ 03 июля 2018

У нас есть веб-приложение, работающее в Северной Великобритании, для которого мы явно указали часовой пояс, используя WEBSITE_TIME_ZONE в настройках приложения. Это мультитенантное SaaS-приложение с архитектурой Shared Database. Теперь у нас есть новый клиент из США, который собирается использовать приложение. но находясь в другом часовом поясе, он меняет даты и время, которые хранятся в базе данных.

Каким должен быть лучший способ, чтобы приложение работало правильно для разных часовых поясов? Должен ли я развернуть отдельный веб-сайт для каждого часового пояса или обработать его в коде?

1 Ответ

0 голосов
/ 03 июля 2018

Несколько вещей:

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

    • Для кода .NET это означает, что вы никогда не должны использовать DateTime.Now, DateTimeKind.Local, TimeZoneInfo.Local и связанные API, потому что они берут свой часовой пояс из настроек сервера.
  • Вместо этого используйте API, которые работают с UTC и / или с определенными часовыми поясами или смещениями часовых поясов.

    • Для кода .NET это означает использование таких вещей, как DateTime.UtcNow, DateTimeOffset, TimeZoneInfo.ConvertTime, TimeZoneInfo.FindSystemTimeZoneById и некоторых других. В качестве альтернативы рассмотрите возможность использования Noda Time , которая предлагает более полный и согласованный API.
  • Как правило, приложение должно отслеживать часовой пояс пользователя и / или местоположение как отдельное поле, сохраняемое как строковый идентификатор часового пояса, либо в формате времени Windows, либо в формате часового пояса IANA. Прочитайте тэг часового пояса wiki для получения более подробной информации (раздел под названием «Базы данных часовых поясов»).

  • Относительно настройки WEBSITE_TIME_ZONE: используйте только тогда, когда все из следующих условий:

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

Мое личное мнение таково, что настройка WEBSITE_TIME_ZONE не должна существовать. Нет необходимости в правильно разработанном приложении. Это костыль, который следует использовать экономно и только в крайнем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...