std::localtime 一秒钟导致 30 分钟的差距
std::localtime one second leads to 30 mins gap
#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。
当您将时区更改为 皮特凯恩群岛 时。
日志显示如下
当地时间 => 年:98, month:3, day:26, hour:23, min:59, sec:59
当地时间 => 年:98, month:3, day:27, hour:0, min:30, sec:0
这是怎么回事?为什么 1 秒会导致 30 分钟的差距??
鉴于给定的 time_t
恰好是进入新小时之前的一秒,这几乎可以肯定与夏令时或其他一些调整有关。
而且,加上一点 Google-fu,here 是:
27 Apr 1998 - Time Zone Change (PNT → PST)
When local standard time was about to reach Monday, 27 April 1998, 12:00:00, midnight clocks were turned forward 0:30 hours to Monday, 27 April 1998, 12:30:00 am local standard time instead.
这实际上经常发生,世界上许多国家都在随意改变他们的当地时间:-)
正如另一个答案所提到的,当地时间一直在变化,夏令时等等。
要 "portably" 表示一个瞬间变得几乎不可能,因此发明了 UTC,这是一个神奇的时区*,它是表示时间的标准方式,仅考虑闰秒。
正确处理所有这些情况非常乏味,但幸运的是 Howard Hinnant this amazing library 可以为您做所有事情:)
* UTC 并不是真正的时区
#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。
当您将时区更改为 皮特凯恩群岛 时。
日志显示如下
当地时间 => 年:98, month:3, day:26, hour:23, min:59, sec:59
当地时间 => 年:98, month:3, day:27, hour:0, min:30, sec:0
这是怎么回事?为什么 1 秒会导致 30 分钟的差距??
鉴于给定的 time_t
恰好是进入新小时之前的一秒,这几乎可以肯定与夏令时或其他一些调整有关。
而且,加上一点 Google-fu,here 是:
27 Apr 1998 - Time Zone Change (PNT → PST)
When local standard time was about to reach Monday, 27 April 1998, 12:00:00, midnight clocks were turned forward 0:30 hours to Monday, 27 April 1998, 12:30:00 am local standard time instead.
这实际上经常发生,世界上许多国家都在随意改变他们的当地时间:-)
正如另一个答案所提到的,当地时间一直在变化,夏令时等等。
要 "portably" 表示一个瞬间变得几乎不可能,因此发明了 UTC,这是一个神奇的时区*,它是表示时间的标准方式,仅考虑闰秒。
正确处理所有这些情况非常乏味,但幸运的是 Howard Hinnant this amazing library 可以为您做所有事情:)
* UTC 并不是真正的时区