c++ clock_gettime() and daylight savings

前端 未结 4 1642
终归单人心
终归单人心 2021-01-23 02:07

I am using clock_gettime() in my C++ program to get the current time. However, the return value is seconds since epoch in UTC. This code can get messed up in my time zone durin

相关标签:
4条回答
  • 2021-01-23 02:18

    Realize that time also reports seconds since the beginning of 1970 (in a time_t). If you take the tv_sec member of the timespec and pass it to localtime or localtime_r, you should get what you want.

    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
    

    And you can deal with the tv_nsec member of the timespec however you wish.

    0 讨论(0)
  • 2021-01-23 02:18

    If you are able to use Boost, you can control all of this explicitly by using the date time libraries: http://www.boost.org/doc/libs/1_49_0/doc/html/date_time.html

    I've had to deal with time on a variety of platforms and in a variety of languages, and I find the boost libraries wildly superior to anything else available.

    0 讨论(0)
  • 2021-01-23 02:30
    #include <time.h>
    time_t rawtime;
    struct tm *timeinfo;
    
        time(&rawtime);
        timeinfo = localtime(&rawtime);
        if (timeinfo->tm_isdst)
            Hour -= 1; // daylight savings time
    
    0 讨论(0)
  • 2021-01-23 02:31

    If you are using Windows, you can use this GetTimeZoneInformation, but you have to include the Windows API.

    Another methode to achieve this would be the struct tm. You will find the details here: struct tm. "The Daylight Saving Time flag (tm_isdst) is greater than zero if Daylight Saving Time is in effect, zero if Daylight Saving Time is not in effect, and less than zero if the information is not available." I think this is the easier way.

    0 讨论(0)
提交回复
热议问题