我在我的C ++程序中使用clock_gettime()来获取当前时间。但是,返回值是UTC中纪元以来的秒数。当时间转移一小时时,此代码可能会在夏令时的时区内搞乱。
系统本身有NTP同步它以始终在EST中给出正确的时间。有没有办法让clock_gettime()报告本地时间而不是UTC,这样我可以避免夏令时问题?
答案 0 :(得分:2)
意识到time
也报告自1970年初以来的秒数(在time_t
中)。如果您使用tv_sec
的{{1}}成员并将其传递给timespec
或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
的{{1}}成员。
答案 1 :(得分:0)
如果您能够使用Boost,则可以使用日期时间库显式控制所有这些:http://www.boost.org/doc/libs/1_49_0/doc/html/date_time.html
我不得不在各种平台和各种语言上处理时间,而且我发现增强库远远优于其他任何可用的。
答案 2 :(得分:0)
如果您使用的是Windows,则可以使用此GetTimeZoneInformation,但必须包含Windows API。
实现这一目标的另一种方法是struct tm。您可以在此处找到详细信息:struct tm。 "如果夏令时生效,夏令时标志(tm_isdst)大于零,如果夏令时没有生效则为零,如果信息不可用则小于零。"我认为这是更简单的方法。
答案 3 :(得分:0)
#include <time.h>
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
if (timeinfo->tm_isdst)
Hour -= 1; // daylight savings time