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

问题描述:

#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。std :: localtime一秒导致30分钟差距

当你改变你的时区到皮特凯恩群岛

日志显示下面

本地持续时间=>年:98,月:3,天:26,时间:23分钟:59,秒:59

本地持续时间=>年:98,month:3,day:27,hour:0,min:30,sec:0

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

+0

具有u改变回合时区皮特凯恩岛屿? – mouse

鉴于time_t给出的时间恰好是在进入新的小时之前的一秒,因此几乎可以肯定是与夏令时或其他调整有关。

而且,带着几分谷歌福,here是:

27 1998四月 - 更改时区(PNT→PST)

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

这其实常有发生,与世界各国的移动本地时间不管三七二十一所有的地方:-)

正如另一个答复中提到,本地时间改变周围的一切的时候,什么与夏令时和whatnots。

“便携式”代表一时间变得几乎不可能,所以UTC被发明出来,这是一个神奇的时区*,它是表示时间的标准方式,仅考虑闰秒。

要正确处理所有这些情况下是非常乏味的,但幸运的是霍华德Hinnant(欣南特)具有this amazing library,做一切你:)

* UTC是不是一个真正的时区