从unix时间转换的问题

时间:2013-10-31 13:57:05

标签: 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                   |
+---------------------+---------------------+
| 2013-10-27 01:00:00 | 2013-10-27 01:00:00 |
+---------------------+---------------------+

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

2 个答案:

答案 0 :(得分:5)

  

支持自己,冬天来了......

这是由于从夏令时到冬令时的过程,取决于您的时区(see this link)。

2013年,Octobre 27th是我们来到冬季的那一天(至少欧洲国家)。凌晨03点,小时变为凌晨02点,这解释了为什么你有两个不同时间戳的相同小时。

Extract from MySQL doc :

  

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

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

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

答案 1 :(得分:2)

看起来很奇怪,看看我在版本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)