gettime()和夏令时
我在我的C ++程序中使用clock_gettime()来获取当前时间。 但是,返回值是UTC以来的秒数。 如果时间偏移一个小时,此代码在夏令时期间可能会在我的时区中混乱。
系统本身具有NTP同步功能,以便始终在EST中提供正确的时间。 有没有办法让clock_gettime()报告本地时间而不是UTC,这样我可以避免夏令时问题?
意识到这个time
也会报告自1970年以来的秒数(在time_t
)。 如果你把timespec
的tv_sec
成员传给localtime
或localtime_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