Datetime 在为多个时区的客户端服务的应用程序中处理日期和时间?

Datetime 在为多个时区的客户端服务的应用程序中处理日期和时间?,datetime,localization,internationalization,timezone,utc,Datetime,Localization,Internationalization,Timezone,Utc,与字符串处理相关的国际化问题基本上可以通过以下建议来解决:使用Unicode并将所有内容作为UTF-8存储在数据库中,然后您将能够使用世界上所有的语言为客户机提供服务 但是与日期/时间处理相关的国际化问题呢 问题: 是否有类似的易于遵循的最佳实践来解决围绕时间处理的国际化问题 您如何确保您的应用程序能够服务于在不同时区运行的客户端?您遇到了哪些问题?您是如何解决这些问题的 我有以下建议 将所有时间存储在一个时区的数据库中,最好是Zulu(GMT) 在注册时为每个用户分配时区。我们通常通过注册页

与字符串处理相关的国际化问题基本上可以通过以下建议来解决:使用Unicode并将所有内容作为UTF-8存储在数据库中,然后您将能够使用世界上所有的语言为客户机提供服务

但是与日期/时间处理相关的国际化问题呢

问题:

  • 是否有类似的易于遵循的最佳实践来解决围绕时间处理的国际化问题
  • 您如何确保您的应用程序能够服务于在不同时区运行的客户端?您遇到了哪些问题?您是如何解决这些问题的

    • 我有以下建议

    • 将所有时间存储在一个时区的数据库中,最好是Zulu(GMT)
    • 在注册时为每个用户分配时区。我们通常通过注册页面的语言或促销链接中嵌入的代码来了解这一点。有时,我们不得不问用户
    • 让客户端知道时区。这意味着客户端无法按原样显示来自服务器的时间。必须以本地时区和本地格式显示
    • 客户端应该努力获取系统的时区信息。若并没有,服务器可以根据各种数据进行猜测。我们首先使用语言,然后使用IP地址,得到了很好的结果。在任何情况下,客户端都需要显示带有区域信息的时间,以便用户知道时间错误时发生了什么
    • 对于某些不受时区影响的时间值,需要使用特殊标志。我们犯了一个错误,用户的生日会在他们更改区域设置时发生变化。属于这一类别的其他物品,包括假期、商店营业时间等
    • 如果您必须与服务器同步时钟,请不要更改系统时间,只需将增量存储在您的客户端中。我们有一个安全要求,时钟必须与主机同步。因此,我们的客户机在启动时将系统时钟与服务器同步。那样做是错误的。对于像Windows 95这样没有时区的旧系统,我们将它们的时间改为GMT。最后旧客户端消失了,但我们面临的一个新问题是我们弄乱了NTP的准确时间

    • 希望我们的一些错误能帮助您避免这些错误。

      我很幸运,通过使用一些JavaScript让客户机通知我们他们的时区。如果我记得的话,它涉及到以本地时间计算用户机器上的当前时间,然后将其与Zulu进行比较。

      ZZCoder有一些优点。这里还有一些:

      • 所有日期时间值必须具有关联的时区。如果日期时间没有一个(例如,在某些情况下,它将意味着GMT+ 0;在其他情况下,是因为代码在计算出来并分配一个代码),则应该定义它的含义。
      • 您可能需要将带有日期时间的事件附加到位置。这意味着您将有一种方法来确定日期时间的时区何时允许更改。这解决了生日移动的问题,但也允许在夏令时开始或结束时进行智能行为。但是,要小心意外的关系:在不同的时区为几个人设置会议应该引用一个规范条目,而不是复制日期时间并将其本地化
      • 不要自己进行计算:始终始终要求库函数进行日期时间计算