2017-10-09 40 views
0

如果我今天(2017年10月9日)针对SQL Server 2008实例执行select GetDate(),该函数将返回10/10/2017即明天的日期。 但是select convert(date, getDate())将返回9/10/2017。我不明白为什么。为什么GetDate()返回明天的日期?

可能相关:微软文档中说

返回当前数据库系统时间戳作为日期时间值 没有数据库时区偏移。此值来自运行SQL Server 实例的计算机的 操作系统。

without the database time zone offset是什么意思?我的SQL Server目前在GMT + 11。

+1

这听起来并不正确。你如何运行这个查询?你能在SSMS中重现吗?如果解决方案是 –

+0

共享解决方案。 – KumarHarsh

回答

0

尝试使用

SELECT CURRENT_TIMESTAMP; 

OR

SELECT SYSDATETIME(); 

对于系统日期和时间。

此外,使用获得UTC与本地时间:

SELECT GETUTCDATE() As UTCDateTime 

而且

SELECT CONVERT(DATETIME, SWITCHOFFSET(CONVERT(DATETIMEOFFSET, GETUTCDATE()), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS LocalDateTime 
+0

最后一个是相当反感... –

+0

我使用最后一个将云托管数据库中的UTC保存时间转换为本地时间。请建议更好。 – ViKiNG

+1

你写的东西基本上是'SYSDATETIMEOFFSET()'。但是如果你说的不是内部的'GETUTCDATE()'你会使用一个数据库字段,那么你错误地认为当前值的* current * offset与那个值相同领域。要正确转换,您需要'AT TIME ZONE'(SQL 2016+)或者更早的SQL使用我的[SQL Server时区支持](https://github.com/mj1856/SqlServerTimeZoneSupport)项目。 –

相关问题