c ++ clock_gettime()和夏令时

时间:2012-06-20 20:19:27

标签: c++ time clock dst

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

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

4 个答案:

答案 0 :(得分:2)

意识到time也报告自1970年初以来的秒数(在time_t中)。如果您使用tv_sec的{​​{1}}成员并将其传递给timespeclocaltime,您应该得到您想要的内容。

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