【发布时间】:2017-08-04 02:50:23
【问题描述】:
我有一个在设置为 PST 的 Azure 服务器上运行的 .net 应用程序,它连接到设置为 UTC 时间的 Azure SQL 服务器。我在很多存储过程中使用函数 getDate()。前进时区将是一个关键问题,需要使它们保持同步。使用函数 DateAdd(hour, -8, getDate()) 不考虑夏令时。我想知道是否有更好的方法来处理这个问题。
【问题讨论】:
我有一个在设置为 PST 的 Azure 服务器上运行的 .net 应用程序,它连接到设置为 UTC 时间的 Azure SQL 服务器。我在很多存储过程中使用函数 getDate()。前进时区将是一个关键问题,需要使它们保持同步。使用函数 DateAdd(hour, -8, getDate()) 不考虑夏令时。我想知道是否有更好的方法来处理这个问题。
【问题讨论】:
将所有datetime 列更改为datetimeoffset(7) 列。这些列存储带有日期和时间的时区信息。
接下来将您的 GETDATE() 调用更改为 SYSDATETIMEOFFSET()。
最后,您可以使用AT TIME ZONE关键字转换存储的时间信息:
SELECT *,
[Time] AT TIME ZONE 'Pacific Standard Time' AS PstTime
FROM TheTable
datetime 值始终存储在UTC(或任何其他任意区域)中,但总是遇到问题。切换到datetimeoffset(7) 后,我几乎所有的问题都得到了解决。【讨论】: