#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分钟的差距?
答案 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实际上不是时区