【问题标题】:Datetime Offset Conversion in SQLSQL 中的日期时间偏移量转换
【发布时间】:2020-10-24 06:21:41
【问题描述】:
我正在使用一个使用日期时间偏移的表。我的值看起来像 2020-01-02 13:30:00 -07:00。
我所在时区的时间是 13:30 还是我需要从中减去 7 小时。我看到人们在 YouTube 上的做法有所不同。
【问题讨论】:
-
您使用的是哪种 DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称——标准 SQL 中没有数据类型 datetime 或 date time offset。请为您正在使用的数据库产品添加tag。
标签:
sql
offset
datetimeoffset
【解决方案1】:
在 MS SQLServer 中,您发布的 DateTimeOffset 字符串表示的最后一部分描述了时区。因此,如果您当前位于时区 -7:00(例如,美国亚利桑那州),则字符串的时间部分指的是您的本地时间,而不是 UTC。 See the Microsoft documentation:
例如,1999-12-12 12:30:30.12345 -07:00 应该 [in UTC] 表示为
1999-12-12 19:30:30.12345Z
只有当他们想要手动获取 UTC 值时,才会从数字中减去偏移量,但如果数据来自夏令时 (DST) 区域,则可能会产生错误,因此您需要强制执行 DST 处理在入境时。 SQLServer 已经在后台以 UTC 格式存储数据:
数据存储在数据库中并进行处理、比较、排序、
并在服务器中按 UTC 编制索引。