Azure Web 应用程序的不同时区

Div*_*yas 2 timezone web-applications azure

我们有一个在英国北部运行的网络应用程序,我们已经WEBSITE_TIME_ZONE在应用程序设置中明确指定了一个时区。它是一个具有共享数据库架构的多租户 SaaS 应用程序。现在我们有一个来自美国的新客户,他将使用该应用程序。但是处于不同的时区,它正在更改存储在数据库中的日期和时间。

让应用程序在不同时区正常工作的最佳实践是什么?我应该为每个时区部署一个单独的网站还是应该在代码中处理它?

Mat*_*int 7

一些东西:

  • 无论语言或平台如何,服务器端代码的最佳实践是使其与时区无关。这意味着不要对单个时区产生任何硬编码的依赖,无论是来自配置文件、托管设置还是服务器设置。

    • 对于 .NET 代码,这意味着您永远不应使用DateTime.NowDateTimeKind.LocalTimeZoneInfo.Local和相关 API,因为它们的时区来自服务器设置。
  • 相反,使用适用于 UTC 和/或特定时区或时区偏移的 API。

    • 对于.NET代码,在使用的东西的手段一样DateTime.UtcNowDateTimeOffsetTimeZoneInfo.ConvertTimeTimeZoneInfo.FindSystemTimeZoneById,和其他几个人。或者,考虑使用Noda Time,它提供了更全面和一致的 API。
  • 通常,应用程序应将用户和/或位置的时区作为单独的字段进行跟踪,以字符串时区标识符的形式存储,以 Windows 时间格式或 IANA 时区格式存储。阅读timezone tag wiki以获取更多详细信息(标题为“时区数据库”的部分)。

  • 关于WEBSITE_TIME_ZONE设置:仅在以下所有条件都为真时使用:

    • 您正在托管使用系统本地时区的应用程序。例如,它可以通过调用获取当前时间DateTime.Now
    • 应用程序的所有用户始终处于同一时区。
    • 无论出于何种原因,您都无法更改应用程序以使其与时区无关。

我个人的意见是该WEBSITE_TIME_ZONE设置不应该存在。在适当设计的应用程序中不需要它。它是一种应谨慎使用且仅作为最后手段使用的拐杖。