2015-06-01 65 views
0

当我运行此:这个时间戳为什么要关闭一个小时?

SELECT TIMESTAMPDIFF(SECOND, FROM_UNIXTIME(0), NOW()) 

它给了我1433183554这是2015-06-01 11:32:34。但SELECT NOW()2015-06-01 10:33:17

这是怎么一个小时?

N.B. select unix_timestamp()会生成正确的时间戳。

+6

带时间戳的基本经验法则:如果您的结果偏离了整整几个小时的几倍,那么它几乎总是时区错误。 –

+0

但是NOW()会返回正确的时间,而SELECT TIMESTAMPDIFF(HOUR,UTC_TIMESTAMP – mpen

+0

[DST](https://en.wikipedia.org/wiki/Daylight_saving_time)。 – axiac

回答

1

axiac's commentTIMESTAMPDIFF忽略时区。您可以通过运行

SELECT TIMESTAMPDIFF(HOUR, '2015-03-08 01:00:00', '2015-03-08 04:00:00'); 

验证这一点应该给2(如果您在太平洋时间是这样),因为我们“春天正向”一个小时,而是给3

+0

函数的目的是快速计算有多少**整个**时间单位(它的第一个参数)在两个日期之间(它返回一个整数)。我认为考虑'DST'需要的知识和计算工作是浪费时间,因为返回的值不能准确(除非单元是“秒”)。 – axiac

+0

这很不幸。我预计它会给出已经过去的实际时间。如果你想得到这个答案的信贷,你可以重新发布,我会接受你的。 – mpen