dav*_*vey 2 sql-server sql-server-2016
无论如何,将存储在 DB 中的 BST 日期时间转换为 UTC
查看了“时区”,但似乎是从 UTC 到其他时间。
数据库将日期时间存储为 BST/GMT 历史上需要将这些日期时间返回为 UTC
SELECT CONVERT(datetime,GETDATE()) AT TIME ZONE 'UTC'
Run Code Online (Sandbox Code Playgroud)
例如
2019-07-08 12:01:55.060 -> 2019-07-08 11:01:550
Run Code Online (Sandbox Code Playgroud)
需要回溯大量历史日期数据,因此可能是 GMT 或 BST,具体取决于一年中的时间以及哪一年将确定回溯的切换日期
下面的示例,我存储了 GMT/BST 时区时间,需要使用 UTC 格式
DECLARE @dayLight TABLE(season VARCHAR(50), [gmt/bst] datetime, uct Datetime)
INSERT INTO @dayLight
VALUES('winter','2019-02-10 15:00:00','2019-02-10 15:00:00')
,('winter','2019-03-30 15:00:00','2019-03-30 15:00:00')
,('summer','2019-03-31 02:00:00','2019-03-31 01:00:00') --cut over
,('summer','2019-04-15 15:00:00','2019-03-30 14:00:00')
,('summer','2019-10-27 02:00:00','2019-10-27 01:00:00') --cut over
,('winter','2019-10-27 03:00:00','2019-10-27 03:00:00')
SELECT season,uct,[gmt/bst] FROM @dayLight
Run Code Online (Sandbox Code Playgroud)
加倍你的AT TIME ZONE
条款以获得你想要的:
第一个AT TIME ZONE
子句指定您希望值所在的当前时区,第二个子句表示您希望将其转换到的时区:
DECLARE @dayLight TABLE(season VARCHAR(50), [gmt/bst] datetime, utc Datetime)
INSERT INTO @dayLight
VALUES('winter','2019-02-10 15:00:00','2019-02-10 15:00:00')
,('winter','2019-03-30 15:00:00','2019-03-30 15:00:00')
,('summer','2019-03-31 02:00:00','2019-03-31 01:00:00') --cut over
,('summer','2019-04-15 15:00:00','2019-03-30 14:00:00')
,('summer','2019-10-27 01:59:59','2019-10-27 00:59:59') --cut over
,('winter','2019-10-27 03:00:00','2019-10-27 03:00:00')
SELECT season,utc,[gmt/bst]
, [gmt/bst] AT TIME ZONE 'GMT Standard Time' AT TIME ZONE 'UTC' AS [gmt/bst -> utc]
, [utc] AT TIME ZONE 'UTC' AT TIME ZONE 'GMT Standard Time' AS [utc -> gmt/bst]
FROM @dayLight
Run Code Online (Sandbox Code Playgroud)
注意:我更新了 10 月份从凌晨 2:00 返回标准时间到凌晨 1:59:59 的时间,因为凌晨 2:00 时间标志着 BST 从夏令时返回到标准时间,因此在这一点上,夏令时时间不再有效(与您的示例相反)。
归档时间: |
|
查看次数: |
3350 次 |
最近记录: |