std :: localtime一秒钟导致30分钟的差距

时间:2017-05-26 03:40:31

标签: c++ localtime

#include <iostream>
int main(){
    std::time_t t = 893665799;
    std::tm * tm = std::localtime(&t);
    printf("local time duration =>year:%d, month:%d, day:%d, hour:%d, min:%d, sec:%d\n",tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);

    t = 893665800;
    tm = std::localtime(&t);
    printf("local time duration =>year:%d, month:%d, day:%d, hour:%d, min:%d, sec:%d\n",tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
}

893665799是一个神奇的utc。

当您将时区更改为皮特凯恩群岛时。

日志显示在下面

当地时间持续时间=&gt;年份:98,月份:3,日期:26,小时:23,最小值:59,秒:59

当地时间长度=&gt;年份:98,月份:3,日期:27,小时:0,分钟:30,秒:0

发生了什么?为什么1秒导致30分钟的差距?

2 个答案:

答案 0 :(得分:1)

鉴于time_t给出的是在进入新的一小时之前的一秒钟,它几乎肯定与夏令时或其他一些调整有关。

而且,有点谷歌,here它是:

  

1998年4月27日 - 时区变更(PNT→太平洋标准时间)

     

当地方标准时间即将于1998年4月27日星期一12:00:00时,午夜时钟转向1998年4月27日星期一0:30至当地标准时间12:30:00。

这实际上经常发生,世界各地的各个国家都在无处不在地移动当地时间: - )

答案 1 :(得分:1)

正如另一个答案所提到的,当地时间一直在变化,夏令时和其他什么都有。

To&#34;便携式&#34;代表一个瞬间变得几乎不可能因此发明了UTC,这是一个神奇的时区*,它是表示时间的标准方式,只考虑闰秒。

正确处理所有这些案件令人难以置信的乏味,但幸运的是Howard Hinnant this amazing library为你做了一切:)

* UTC实际上不是时区