【问题标题】:SQl Server Timezone offset CalculationSQL Server 时区偏移量计算
【发布时间】:2014-01-14 22:44:15
【问题描述】:

我将所有日期存储在 UTC 日期的 SQL Server 日期时间字段中。 有一个要求,我必须在 UTC 日期字段的过程中计算本地日期时间,为此我有本地日期时间的时区偏移量。

例如。我的时区偏移量是:'05:30:00'

UTC 日期为:2013-02-09 08:34:12.037

期望的输出:2013-02-09 14:04:12.037

现在有一种简单的方法可以在没有 DateAdd 的情况下执行此操作,并将偏移量拆分为小时和分钟。

【问题讨论】:

标签: sql-server


【解决方案1】:

您应该可以使用SWITCHOFFSET 函数。这是一个例子:

declare @dt datetime;

set @dt = '2013-02-09 08:34:12.037';

select SWITCHOFFSET(CONVERT(datetimeoffset, @dt), '+05:30') as 'DATETIMEOFFSET',
       CAST(SWITCHOFFSET(CONVERT(datetimeoffset, @dt), '+05:30') as datetime) as 'DATETIME'

-- Outputs: 
--
-- 2013-02-09 14:04:12.0370000 +05:30       2013-02-09 14:04:12.037

【讨论】:

    【解决方案2】:

    使用 112 的转换:

    declare @d datetime
    set @d = getdate()
    declare @s nvarchar(20)
    set @s = convert(varchar, @d, 112)
    print @s
    

    该字符串将包含年、月、秒等。始终位于同一位置

    用子串提取想要的部分:

    print substring(@s, 1, 4) -- the year
    

    现在通过将小时乘以 60 并加上分钟,将整个数值重新计算为分钟。现在从该数字中减去您的分钟增量。使用调整后的日期时间构建一个新字符串,并将其转换回日期时间。但是...如果您还需要知道日期,并且想要正确地进行操作....还有一些编码。

    我的建议:请务必使用 dateadd,它既简单又正确(我的建议是减去分钟数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-22
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多