【发布时间】:2016-02-06 19:55:23
【问题描述】:
我们使用一个以 UTC 时间保存时间戳的程序。我们是犹他州的本地公司,因此会受到夏令时的影响。
例如,如果我们现在接到一个电话,它是12:52:00 MST,它会在数据库中保存为19:52:00。
我首先担心的是明年 DST 将于 2016 年 3 月 13 日再次开始,而我正好在同一时间运行它。 UTC 中的时间戳是 18:52:00 还是保持在 19:52:00?
我的第二个问题是如果我将数据库中的日期转换为我的本地时间,那么我必须首先检查它是否是 DST,然后是否需要时间 -6,如果不是,它会是 -7?
所以使用上面的例子:
IsDST = 01:52:00 (-6)
IsNotDST = 12:52:00 (-7)
我认为这是我需要担心必须转换为/从 UTC 转换的事情?
除了上述两个问题之外,我的主要问题。 SQL Server/T-SQL 中是否有任何东西可以为我处理这种转换,还是我需要自己编写所有东西来满足需要?
我已经开始了,但如果有必要,现在需要在 DST 中工作
DECLARE @declared_start_datetime DATETIME,
@declared_end_datetime DATETIME,
@converted_start_datetime DATETIME,
@converted_end_datetime DATETIME
SET @declared_start_datetime = '11/04/2015 07:00:00' -- Hour we open phones
SET @declared_end_datetime = '11/04/2015 18:00:00' -- Hour we close phones
SET @converted_start_datetime = DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), @declared_start_datetime)
SET @converted_end_datetime = DATEADD(second, DATEDIFF(second, GETDATE(), GETUTCDATE()), @declared_end_datetime)
select @declared_start_datetime as 'Declared Start',
@declared_end_datetime as 'Declared End'
select @converted_start_datetime as 'Converted Start',
@converted_end_datetime as 'Converted End'
【问题讨论】:
-
你的问题一点都不清楚。你似乎知道
GETUTCDATE(),你说你想使用UTC时间戳(不错的选择),你为什么还要处理本地时间戳? -
哪个时间是同一时间:
12:52:00MST 还是 MDT?除了注意夏令时在不同时间开始的方式以及不久前发生这种转变之外,还有一个重要的区别。 -
这些报告将由公司中的其他人员运行,他们将选择运行报告的时间(当地时间)。而且我预示着他们必须自己学习/转换为 UTC 的投诉/强烈反对的数量。所以我需要取他们的当地时间并将它们转换为 UTC 以从数据库中获取正确的记录。 @amit
-
@JBKing 现在正确的时间是 MST (-7) 明年 3 月 13 日凌晨 2:00 如果我的研究是正确的,它将变成 MDT (-6)。
-
您讲述的“用户故事”是表示或业务层的问题,而不是数据库/存储层的问题。在那边处理。
标签: sql sql-server tsql dst