参考时间戳查找文档
https://dev.mysql.com/doc/refman/8.3/en/timestamp-lookups.html
在文档中有一个示例,说明 UTC 到本地时区如何导致 descrepenices
具体计算如下: 文档用语
The following example shows distinct UTC values that become identical in a non-UTC time zone:
mysql> CREATE TABLE tstable (ts TIMESTAMP);
mysql> SET time_zone = 'UTC'; -- insert UTC values
mysql> INSERT INTO tstable VALUES
('2018-10-28 00:30:00'),
('2018-10-28 01:30:00');
mysql> SELECT ts FROM tstable;
+---------------------+
| ts |
+---------------------+
| 2018-10-28 00:30:00 |
| 2018-10-28 01:30:00 |
+---------------------+
mysql> SET time_zone = 'MET'; -- retrieve non-UTC values
mysql> SELECT ts FROM tstable;
+---------------------+
| ts |
+---------------------+
| 2018-10-28 02:30:00 |
| 2018-10-28 02:30:00 |
+---------------------+
首先也是最重要的
DST 切换发生在
,这意味着 MET 时间 @ 凌晨 2 点变为凌晨 3 点,如下面的屏幕截图所示March 25th @ 2 AM
不让我们看看计算::
当时区更改为非 UTC 时,MET 比 UTC 早 1 小时
MET | 世界标准时间 | 实行夏令时 |
---|---|---|
10/25 00:00 | 10/24 23:00 | 不 |
10/25 01:00 | 10/25 00:00 | 不 |
10/25 01:59 | 10/25 00:59 | 不 |
10/25 03:00 | 10/25 01:00 | 是的,凌晨 2 点——前进 1 小时——所以变成凌晨 3 点 |
所以
00:30
UTC --> MET 时间应该是 01:30
-- 1 hour ahead before 2AM MET
和 01:30
应变为 02:30
或 03:30
?
MET 中没有发布
2AM to 2:59AM
日间灯开关的时间。它将显示 3AM 作为时间戳。
我的分析中的错误在哪里?
您忘记考虑 DST 结束时间。所以三月是它的开始月,但它在十月结束。因此,第一个时钟向前移动,实际上“损失”了一个小时(这可能导致当地时间“跳跃”,即从凌晨 1:59 直接到凌晨 3:00,因为没有凌晨 2:00)。但在 10 月,时钟会向后移动,有效地“向后”倒退一小时,但这可能会导致当地时间“重复”一小时,而不是“丢失”一小时的例子。所以你的 SQL 示例完美地说明了并且很好。