我有一个DateTime varchar,格式如下:2005-08-08T00:00:00+01:00。
- 这种格式有名称吗?(不是ISO8601。是RFC3339吗?)
- 如何使用Transact-Sql将其转换为DateTime?
编辑 以下是从其他人的意见中汇总的答案:
- 它是带有UTC时间偏移量的ISO8601格式。如果它是UTC时间,它会以“Z”结尾,而不是“+01:00”。维基百科
您可以按以下方式将其转换为本地时间或UTC时间:
DECLARE @d VARCHAR(25) SET @d = '2007-08-08T00:01:00+01:00' SET @d = '2007-08-08T00:01:00-01:00' SET @d = '2007-08-08T00:01:00+05:30'
SELECT @d as Input, CONVERT(DATETIME, LEFT(@d, 19), 126) AS LocalDate , DATEADD(MINUTE , -CAST((SUBSTRING(@d, 20, 1) + RIGHT(@d, 2)) AS INT) , DATEADD(HOUR ,-CAST(SUBSTRING(@d, 20, 3) AS INT) , CONVERT(DATETIME, LEFT(@d, 19), 126))) as UtcDate WHERE @d LIKE '_--_T__::[+-]:'
结果:
Input LocalDate UtcDate
------------------------- ----------------------- -----------------------
2007-08-08T00:01:00+01:00 2007-08-08 00:01:00.000 2007-08-07 23:01:00.000
2007-08-08T00:01:00-01:00 2007-08-08 00:01:00.000 2007-08-08 01:01:00.000
2007-08-08T00:01:00+05:30 2007-08-08 00:01:00.000 2007-08-07 18:31:00.000