FROM_UNIXTIME与DATE_ADD不匹配秒

时间:2013-12-20 13:43:25

标签: mysql date

有人可以解释为什么这有所不同?

SELECT 
  FROM_UNIXTIME(547164000),
  DATE_ADD(FROM_UNIXTIME(0), INTERVAL 547164000 SECOND),
  @@session.time_zone

返回

1987-05-05 00:00:00
1987-05-04 23:00:00
SYSTEM

系统的时区是CEST,+ 0200(通过命令date +%z获得)。

我正在使用此DATE_ADD方法来处理负时间戳,因为FROM_UNIXTIME不支持负值。

1 个答案:

答案 0 :(得分:0)

可以使用自己的time_zone设置MySQL服务器,这样它的行为就像PHP的time()。也就是说,将time()值存储到TIMESTAMP字段中然后显示结果格式化的日期和时间可能不会给出预期的结果。您必须小心不要混用SQL和非SQL时间戳使用,但要坚持使用其中一个。为什么它给两个表达式提供不同的结果对我来说并不清楚,但可能指出MySQL中的一个错误。您认为将N秒添加到0时会产生与普通N时间相同的结果...您确定它们是在完全相同的time_zone和DST /夏令时规则下进行格式化吗? / p>