在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
标签:UTC,server,时间,本地,sql,datetime,DECLARE,SELECT From: https://www.cnblogs.com/Vliana/p/18531793