2

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

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

4

4 回答 4

2

意识到这time也报告了自 1970 年初以来的秒数(在 a 中time_t)。如果你把 的tv_sec成员timespec传递给localtimeor 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

于 2012-06-20T21:31:27.763 回答
1

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

实现此目的的另一种方法是 struct tm。您将在此处找到详细信息:struct tm。“如果夏令时有效,夏令时标志 (tm_isdst) 大于零,如果夏令时无效,则为零,如果信息不可用,则小于零。” 我认为这是更简单的方法。

于 2015-12-07T21:49:35.473 回答
0

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

我不得不在各种平台和各种语言上处理时间,我发现 boost 库比其他任何可用的库都优越得多。

于 2012-06-20T20:24:32.990 回答
0
#include <time.h>
time_t rawtime;
struct tm *timeinfo;

    time(&rawtime);
    timeinfo = localtime(&rawtime);
    if (timeinfo->tm_isdst)
        Hour -= 1; // daylight savings time
于 2020-07-09T18:35:12.500 回答