【发布时间】:2022-01-28 07:40:44
【问题描述】:
数据源是 SQL Server 2014(只读)。 Grafana v8.2.1.
列是changeDate datetime2(7)。
我正在使用在 CET 中配置的 DBeaver(我在 UTC+1 时区),它显示:
活动实际UTC时间:2022-01-27 12:47:09
单元格值:2022-01-27 13:47:09(CET,UTC +1)
2022-01-27T12:47:09.784Z(值显示为 ISO8601 格式的源代码,因此为 UTC)
一切似乎都很好,现在是实际时间。然后我检查在 CET (UTC +1) 时区配置的 Grafana 中接收到的数据。
(原始数据)1643291229000 或 GMT(UTC):2022-01-27 13:47:09(+1 小时班次)
显示为 UTC + 1:2022-01-27 14:47:09
您可以看到 Epoch 时间戳提前 1 小时。
我的查询很简单:SELECT changeDate as time (...)
我无法在 SQL Server 2014 中使用 AT TIME ZONE。
我将非常感谢任何帮助。
【问题讨论】:
-
不,不是提前 1 小时。这正是 13:47 UTC 对 UTC+1 的看法。无论如何,转换是由 Grafana 执行的,而不是 SQL Server。如果您关心偏移量,您应该使用
datetimeoffset,但在这种情况下,所有正确配置的应用程序都会同时显示 -
SQL Server 或 JSON 无论如何都不处理 UNIX 时间戳。几乎所有主要数据库(SQLite 除外)都有适当的日期类型。在 JSON 中,实际的日期文字标准是 ISO8601 格式。实际的存储格式应该无关紧要,并且很可能 不 与 Unix 时间戳相同。
-
@PanagiotisKanavos 那么,数据存储在UTC还是UTC+1?为什么如果我将数据库值显示为源代码/json 它是 2022-01-27T12:47:09.784Z(我猜这是 UTC)?
-
你告诉我们。您是存储数据的人。如果没有
datetimeoffset中的偏移量,您只能假设日期存储为 UTC。您所描述的建议日期存储为 UTC 并正确显示为 UTC+1。 UTC 表示+00:00的偏移量。 UTC+1 表示+01:00的偏移量。时间13:00+00是14:00 +01:00 -
真正的问题是什么?既然您将 Grafana 配置为显示 CET 时间,为什么要期待不同的英国冬季时间?伦敦的中午 12 点是维也纳的 13:00。如果您将值存储为 12pm London,则每个配置为显示维也纳时间的应用程序都将显示 13:00
标签: sql-server datetime sql-server-2014 grafana