3

在尝试处理 MySQL 中的 unix 时间戳时,我发现了一些奇怪的东西。我注意到在转换为任意日期的 unix 时间戳时,两者之间的时间超过 1 秒'00:59:59''01:00:00'再深入一点,我有以下示例查询,结果我不明白:

SELECT FROM_UNIXTIME(1382835600) AS a, FROM_UNIXTIME(1382832000) AS b;
+---------------------+---------------------+
| a                   | b                   |
+---------------------+---------------------+
| 2013-10-27 01:00:00 | 2013-10-27 01:00:00 |
+---------------------+---------------------+

两个 unix 时间戳相隔 1 小时(3600 秒),但生成的时间戳是相同的。也许这是一个时区问题,但毕竟它在同一台服务器上。

4

2 回答 2

5

振作起来,冬天来了……

这是由夏令时到冬令时造成的,具体取决于您的时区(请参阅此链接)。

2013 年 10 月 27 日是我们进入冬季时间的日子(至少对于欧洲国家而言)。在凌晨 3 点,小时变成了凌晨 2 点,这就解释了为什么这两个不同的时间戳具有相同的小时。

从 MySQL 文档中提取:

[FROM_UNIXTIME] 返回 unix_timestamp 参数 [...] 的表示。该值以当前时区表示。

如果我计算得好,你在格林威治标准时间工作。
几个小时后再试一次,你会发现一切正常:

SELECT FROM_UNIXTIME(1382839200) AS a, FROM_UNIXTIME(1382842800) AS b;
于 2013-10-31T14:15:53.437 回答
2

看起来很奇怪,看看我在 14.14 Distrib 5.1.51 上得到了什么:

mysql> SELECT FROM_UNIXTIME(1382835600) AS a, FROM_UNIXTIME(1382832000) AS b;
+---------------------+---------------------+
| a                   | b                   |
+---------------------+---------------------+
| 2013-10-27 05:00:00 | 2013-10-27 04:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
于 2013-10-31T14:10:13.593 回答