Azure Web应用的不同时区

时间:2018-07-03 13:16:15

标签: azure web-applications timezone

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

什么是使应用在不同时区正确运行的最佳实践?我应该为每个时区部署一个单独的网站还是应该使用代码进行处理?

1 个答案:

答案 0 :(得分:4)

几件事:

  • 无论哪种语言或平台,服务器端代码的最佳实践都是与时区无关。这意味着在单个时区上进行任何硬编码的依赖关系,无论是来自配置文件,托管设置还是服务器设置。

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

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

  • 关于WEBSITE_TIME_ZONE设置:仅当满足以下条件的所有 时使用:

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

我个人认为WEBSITE_TIME_ZONE设置不应该存在。在适当设计的应用程序中不需要它。这是一个拐杖,应该谨慎使用,并且只能作为最后的手段。