gettime()和夏令时

我在我的C ++程序中使用clock_gettime()来获取当前时间。 但是,返回值是UTC以来的秒数。 如果时间偏移一个小时,此代码在夏令时期间可能会在我的时区中混乱。

系统本身具有NTP同步功能,以便始终在EST中提供正确的时间。 有没有办法让clock_gettime()报告本地时间而不是UTC,这样我可以避免夏令时问题?


意识到这个time也会报告自1970年以来的秒数(在time_t )。 如果你把timespectv_sec成员传给localtimelocaltime_r ,你应该得到你想要的。

timespec tsv;
clock_gettime(CLOCK_REALTIME, &tsv);
time_t t = tsv.tv_sec; // just in case types aren't the same
tm tmv;
localtime_r(&t, &tmv); // populate tmv with local time info

你可以处理tv_nsec的成员timespec但是你的愿望。


如果你能够使用Boost,你可以通过使用日期时间库来显式控制所有这些:http://www.boost.org/doc/libs/1_49_0/doc/html/date_time.html

我不得不在各种平台和各种语言中处理时间,并且我发现boost库优于其他任何可用的库。


如果您使用Windows,则可以使用此GetTimeZoneInformation,但必须包含Windows API。

另一种实现这一点的方法是struct tm。 你会在这里找到详细信息:struct tm。 “如果夏令时生效,则夏令时标志(tm_isdst)大于零,如果夏时制不生效,则夏令时标志为零;如果信息不可用,则夏令时标志小于零。 我认为这是更简单的方法。

链接地址: http://www.djcxy.com/p/29401.html

上一篇: gettime() and daylight savings

下一篇: Historical daylight savings in Windows