windows 服务器有一个注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation,其中 ActiveTimeBias 字段将返回您正在运行的计算机相对于 GMT 的分钟偏移量。
我们有一个 Web 应用程序,需要在我们生成的 html 页面上向用户显示他们的当地时间。为此,我们让他们设置时区首选项,然后获取上述值,以便可以比较服务器时间和客户端时间并进行正确的计算。
在我们构建的服务器上,这效果很好。我们正在将应用程序部署到一级云提供商,该提供商提供我们配置和使用的 Windows 服务器 ami。我们发现,当您在本地服务器上使用时钟控制面板时,TimeZoneInformation 的注册表项是正确的。当我们对此虚拟机执行相同操作时,除 ActiveTimeBias 之外的条目都是正确的。
微软警告不要以惯常的方式欺骗个人价值。
向社区提出的问题 - 还有其他人遇到过这个问题吗?如果有,你是如何解决的?
人们通常不会直接针对这些注册表项进行编程。例如,在 .Net 中,我们有
TimeZoneInfo
类。它使用相同的数据,但以一种对开发人员更加友好的方式。
关于您的特定问题,
ActiveTimeBias
键保存您的服务器设置的时区相对于UTC的当前偏移量。如果您的服务器所在的时区遵循夏令时规则,那么该时区每年会更改两次。如果您手动更新时区并刷新注册表,您将看到它发生变化。
我能提供的最好建议是,由于服务器的时区可能对任何人来说都不重要,因此您应该将其设置为 UTC。
另请参阅:夏令时和时区最佳实践