Mysql 从unix时间转换的问题

Mysql 从unix时间转换的问题,mysql,timezone,timestamp,unix-timestamp,Mysql,Timezone,Timestamp,Unix Timestamp,在MySQL中处理unix时间戳时,我发现了一些奇怪的事情。我注意到在转换为任意日期的unix时间戳时,'00:59:59'和'01:00:00'之间的时间间隔超过1秒。再深入一点,我有以下示例查询,结果我不明白: SELECT FROM_UNIXTIME(1382835600) AS a, FROM_UNIXTIME(1382832000) AS b; +---------------------+---------------------+ | a | b

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

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秒),但产生的时间戳是相同的。可能是时区问题,但它毕竟在同一台服务器上。

看起来很奇怪,看看我在14.14发行版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月27日是我们进入冬季的日子(至少对欧洲国家来说是这样)。凌晨3点,时间变成了凌晨2点,这就解释了为什么这两个不同的时间戳有相同的时间

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

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

SELECT FROM_UNIXTIME(1382839200) AS a, FROM_UNIXTIME(1382842800) AS b;

现在这是一个令人困惑的地狱。我没有MySQL服务器来验证,让我们看看其他人怎么说+1:)时间就是这样。有关更多信息,请参阅。我假设您所在的时区已经过了夏时制转换时间。但是谢谢你的测试。它确认了先前的答案,即这是DST问题。