我在使用GetDate()
时遇到问题,由于某种原因没有返回正确的时间(比实际时间提前7小时)我正在使用AZURE
并且数据库配置了正确的位置(美国西部)。我将不胜感激任何帮助!
我试图运行这个脚本:
SELECT id,
status,
AcceptedDate,
Getdate(),
Datediff(hour, AcceptedDate, Getdate())
FROM orderoffers
WHERE status = 'Accepted'
答案 0 :(得分:9)
Azure SQL数据库始终为UTC,无论数据中心如何。您需要在应用程序中处理时区转换。
在这种情况下,由于您要将“now”与数据列进行比较,请确保AcceptedDate
也以UTC格式存储。
答案 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