且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何处理SQL中的时间存储

更新时间:2021-09-04 05:36:18

始终将DATETIME数据存储在世界协调时间(UTC aka GMT)

always store DATETIME data in Universal Time Coordinated (UTC aka GMT)

  • 这避免了所有时区问题
  • 这避免了夏令时的问题
  • 这使简单的日期数学始终有效
  • 这使不同时区的交易保持同步
  • 这使您可以将数据移到不同时区的另一台服务器上,而不会花费很多时间
  • 等通用"时间有意义吗?

C#DateTime提供DateTime.UtcNow和ToLocalTime(),SQL提供GETUTCDATE().这是一个将UTC转换为本地时间的SQL函数-

C# DateTime provides DateTime.UtcNow and ToLocalTime(), SQL provides GETUTCDATE(). Here's a SQL function to convert UTC to local time -

-- convert UTC to local time
create FUNCTION [dbo].[udfUtcToLocalTime]
(
    @gmt datetime
)
RETURNS datetime
AS
BEGIN
    DECLARE @dt datetime
    SELECT 
        @dt = dateadd(millisecond,datediff(millisecond,getutcdate(), getdate()),@gmt)
    RETURN @dt
END

示例:

SELECT dbo.udfUtcToLocalTime(someDateTimeField)
FROM someTable