SQL GetDate()返回错误的时间

时间:2014-12-30 19:09:31

标签: sql azure-sql-database getdate

我在使用GetDate()时遇到问题,由于某种原因没有返回正确的时间(比实际时间提前7小时)我正在使用AZURE并且数据库配置了正确的位置(美国西部)。我将不胜感激任何帮助!

我试图运行这个脚本:

SELECT id,
       status,
       AcceptedDate,
       Getdate(),
       Datediff(hour, AcceptedDate, Getdate())
FROM   orderoffers
WHERE  status = 'Accepted' 

4 个答案:

答案 0 :(得分:9)

Azure SQL数据库始终为UTC,无论数据中心如何。您需要在应用程序中处理时区转换。

在这种情况下,由于您要将“now”与数据列进行比较,请确保AcceptedDate也以UTC格式存储。

Reference

答案 1 :(得分:2)

Azure云上的SQL数据库与Greenwich Mean Time(GMT) or Coordinated Universal Time(UTC)挂钩,但是许多应用程序正在使用DateTime.Now,这是根据主机上指定的区域设置的时间。

有时,当DateTime不用于任何时间跨度或比较时,这不是问题,而是仅用于显示。但是,如果使用通过GETDATE()DateTime.Now填充的日期将现有数据库迁移到SQL Azure,则会有偏移量,在夏令时期间为7小时或标准时间为8小时。 / p>

答案 2 :(得分:0)

我创建了一个简单的函数,无论是否在DST中都返回正确的英国时间。 可以将其调整为启用DST的其他时区。

CREATE FUNCTION [dbo].[f_CurrentDateTime]() RETURNS DATETIME AS
BEGIN
RETURN DATEADD(HOUR,CONVERT(INT,(SELECT is_currently_dst FROM sys.time_zone_info WHERE 1=1 AND NAME = 'GMT Standard Time')),GETDATE())
END

答案 3 :(得分:-1)

在当今全球范围扩展基础架构的现代时代,最好将数据保存在UTC中并根据用户的位置偏好将其转换为时区。

请参考:https://docs.microsoft.com/en-us/dotnet/api/system.datetime.utcnow?view=netframework-4.7.2