c++;时钟和夏令时 我在C++程序中使用CcLyLGGTimeTime[()来获取当前时间。但是,返回值是UTC中自历元起的秒数。在夏时制期间,当时间移动一小时时,我的时区中的代码可能会出错

c++;时钟和夏令时 我在C++程序中使用CcLyLGGTimeTime[()来获取当前时间。但是,返回值是UTC中自历元起的秒数。在夏时制期间,当时间移动一小时时,我的时区中的代码可能会出错,c++,time,clock,dst,C++,Time,Clock,Dst,系统本身有NTP同步,以便在EST中始终给出正确的时间。有没有办法让clock_gettime()报告本地时间而不是UTC,这样我就可以避免夏令时问题?如果您能够使用Boost,您可以使用日期-时间库显式控制所有这些: 我不得不在各种平台和各种语言上处理时间问题,我发现boost库远远优于其他任何可用的库。意识到time也报告了自1970年初以来的秒数(在time\u t中)。如果您使用timespec的tv\u sec成员并将其传递给localtime或localtime\r,您应该会得到想要

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

如果您能够使用Boost,您可以使用日期-时间库显式控制所有这些:


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

意识到
time
也报告了自1970年初以来的秒数(在
time\u t
中)。如果您使用
timespec
tv\u 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

您可以随意处理
timespec
成员的
tv\u nsec

如果您使用的是Windows,您可以使用它,但必须包含Windows API

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

\35;
#include <time.h>
time_t rawtime;
struct tm *timeinfo;

    time(&rawtime);
    timeinfo = localtime(&rawtime);
    if (timeinfo->tm_isdst)
        Hour -= 1; // daylight savings time
时间与时间; 结构tm*时间信息; 时间(&rawtime); timeinfo=localtime(&rawtime); 如果(时间信息->tm_isdst) 小时-=1;//日光节约时间
为什么不将UTC转换为当地时间?将“获取时间”与“转换为本地时间”分开。当然,但是我必须在代码中每年手动更改两次转换系数。我不是建议硬编码。我建议使用一个日期/时间库来执行转换,也可以考虑使用库来进行转换。这个代码似乎不适合我,我遇到了:错误:不能转换?TimeSim**?到?常数时间?争论?1?to?tm*localtime_r(const time_t*,tm*)?@user788171:代码为我逐字编译。我从编译的代码中粘贴了它。很抱歉,这对我来说不是很有用。这段代码是我在Windows Visual Studio C++中使用的代码。上面的代码来自于,但是如果您只使用来自timeinfo的日期和时间,则月份是错误的。