sql server 中 本地时间与UTC时间的转换

在SQL Server中,可以使用 GETUTCDATE()函数获取当前的UTC时间,而SYSDATETIME()CURRENT_TIMESTAMP等函数获取的是本地时间。

如果需要将UTC时间转换为本地时间,可以使用DATEADD()函数上相应的小时数,这取决于本地时间与UTC时间之间的时差。

方法一:

以下是一个将UTC时间转换为本地时间的例子:

-- 假设UTC时间
DECLARE @UTCDateTime datetime = '2024-11-11 12:00:00';
-- 转换为本地时间
DECLARE @LocalDateTime datetime;
SET @LocalDateTime = DATEADD(hour, DATEDIFF(hour, GETUTCDATE(), GETDATE()), @UTCDateTime);
SELECT @LocalDateTime as LocalTime;

反之,如果需要将本地时间转换为UTC时间,可以使用相反的逻辑:

-- 假设本地时间
DECLARE @LocalDateTime datetime = '2024-11-11 12:00:00';
-- 转换为UTC时间
DECLARE @UTCTime datetime;
SET @UTCTime = DATEADD(hour, -DATEDIFF(hour, GETUTCDATE(), GETDATE()), @LocalDateTime);
SELECT @UTCTime as UTCTime;

方法二:

若放到sql中查询某一列 也可使用

  SELECT TOP 2 
    [LastUpdateOn] UTCTime,
   [InstallTimeToLocalTime] = CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, [LastUpdateOn]), DATENAME(TzOffset, SYSDATETIMEOFFSET())))
    FROM EMPLOYEE e

此处解释一下

语法
返回从存储的时区偏移量变为指定的新时区偏移量时得到的 datetimeoffset 值。

SWITCHOFFSET ( DATETIMEOFFSET, time_zone )
参数
DATETIMEOFFSET
是一个可以解析为 datetimeoffset(n) 值的表达式。

time_zone
是一个格式为 [+|-]TZH:TZM 的字符串,或是一个表示时区偏移量的带符号的整数(分钟数),假定它能够感知夏时制并作出相应的调整。

返回类型
具有 DATETIMEOFFSET 参数的小数精度的 datetimeoffset。

 

当然了 也可以 结合方法一二 新建一个Function, 后续直接调用此方法函数即可 (注意不同数据库账号之间是否需要授权)

CREATE OR ALTER FUNCTION dbo.CIM_F_Local_To_UTC (@idtDateTime DATETIME)
RETURNS DATETIME
AS
BEGIN
  DECLARE @Differance INT
  SET @Differance = (SELECT  DifferenceDays  FROM DateFiffView)
  SET @idtDateTime = DATEADD(mi, @Differance * 60, @idtDateTime);
  RETURN @idtDateTime
END

GO
----附创建的视图DateFiffView 
CREATE VIEW dbo.DateFiffView 
AS SELECT datediff(mi,getdate(),getutcdate())/60 as DifferenceDays
GO
---- 调用方式举例
  SELECT   DBO.CIM_F_Local_To_UTC(e.CreatedOn) 
    FROM EMPLOYEE e

 

 

 

 

 

 

posted @ 2024-11-07 11:17  余路还要走多久  阅读(214)  评论(0编辑  收藏  举报