SQL Server为函数返回错误的UTC时间GETUTCDATE
问题描述:
我们的服务器在美国的CST时区,CST的时区比UTC时区晚6小时。由于是夏令时,现在的差别是5个小时。SQL Server为函数返回错误的UTC时间GETUTCDATE
GETDATE
函数返回正确的本地时间,但GETUTCDATE
返回错误的UTC时间。 GETUTCDATE
返回CST前7小时(UTC + 2:00)的时间。
检查服务器的时区并将其设置为CST时区(UTC - 6:00),并且选项“自动设置时区”已关闭。
我不知道还有什么要检查的。
答
“自动设置时区”是Windows 10/Server 2016中添加的一项便利功能。它使用可用的位置信息来设置时区。这是没有必要的,而且真的不应该在服务器上重要。事实上,最好的做法是有意将服务器设置为UTC时区,以便本地时差不会发生干扰。你不妨考虑这个选项。
不过,也有几件事情要检查:
-
是服务器的时钟同步到一个可靠的时间源?
- 如果您的服务器在域中,那么域控制器的时钟是否与基于Internet的时间源或其他可靠的时间源同步?
- 如果不在域中,您是否打开了“自动设置时间”或“Internet时间”?或者其他一些正确设置时钟的机制?
- 如果不确定时钟的同步位置,请从提升的命令提示符处尝试
w32tm /query /source
。 - 如果您只想检查原始UTC时间,请尝试Powershell中的
[DateTime]::UtcNow
。 (时区中没有或DST设置将影响结果。)
-
如果所述系统被配置用于本地时区,则“调整为自动夏令时”(或“自动调整时钟的日光在较旧的控制面板设置中保存时间“)是否打开?这个设置应该永远不会被禁用。它仅用于传统目的。
- 如果不确定,请在命令提示符下尝试
tzutil /g
。如果结果中有_dstoff
这个名字,那么你应该把它重新打开。
- 如果不确定,请在命令提示符下尝试