TIMESTAMP 字段 - UTC <> 本地时区

问题描述 投票:0回答:1

参考时间戳查找文档

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 切换发生在

March 25th @ 2 AM
,这意味着 MET 时间 @ 凌晨 2 点变为凌晨 3 点,如下面的屏幕截图所示

不让我们看看计算::

当时区更改为非 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 作为时间戳。

我的分析中的错误在哪里?

  • 纠正我的计算
  • Mysql8 文档必须更正
mysql time mysql-8.0
1个回答
0
投票

您忘记考虑 DST 结束时间。所以三月是它的开始月,但它在十月结束。因此,第一个时钟向前移动,实际上“损失”了一个小时(这可能导致当地时间“跳跃”,即从凌晨 1:59 直接到凌晨 3:00,因为没有凌晨 2:00)。但在 10 月,时钟会向后移动,有效地“向后”倒退一小时,但这可能会导致当地时间“重复”一小时,而不是“丢失”一小时的例子。所以你的 SQL 示例完美地说明了并且很好。

© www.soinside.com 2019 - 2024. All rights reserved.