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

kno*_*orv 0 timezone datetime localization utc internationalization

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

但与日期/时间处理相关的国际化问题又如何呢?

问题:

  • 是否有类似的易于遵循的最佳实践来解决围绕时间处理的国际化问题?
  • 您如何确保您的应用程序可以为在不同时区运营的客户提供服务?你遇到了什么问题,你是如何解决的?

ZZ *_*der 7

我有以下建议,

  1. 使用一个时区将所有时间存储在数据库中,最好是Zulu(GMT).
  2. 在注册时为每个用户分配时区.我们通常会从注册页面的语言或促销链接中嵌入的代码中找出这一点.有时候,我们要问用户.
  3. 让客户了解时区.这意味着客户端无法按原样显示服务器的时间.必须以本地时区和本地格式显示.
  4. 客户应该努力获取系统的时区信息.如果没有,服务器可以从各种数据猜测.我们首先使用语言获得了良好的结果,然后是IP地址.在任何情况下,客户端都需要显示带有区域信息的时间,以便用户在时间错误时知道发生了什么.
  5. 对于不受时区影响的特定时间值,需要特殊标记.当用户的生日改变他们的语言环境时,我们有一个错误.属于此类别的其他事物包括假期,营业时间等.
  6. 如果您必须将时钟与服务器同步,请不要更改系统时间,只需将delta存储在客户端中即可.我们有一个安全要求,即时钟必须与主机同步.所以我们的客户端在启动时与我们的服务器同步系统时钟.这是错误的做法.对于没有时区的Windows 95等旧系统,我们将时间更改为GMT.最后,老客户离开了,但我们面临的一个新问题是我们搞砸了NTP的准确时间.

希望我们的一些错误能帮助你避免它们.