Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c++ clock_gettime() and daylight savings

Tags:

c++

time

dst

clock

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 during daylight savings when the time shifts by one hour.

The system itself has NTP syncing it to always give the correct time in EST. Is there a way to get clock_gettime() to report the local time instead of UTC so I can avoid the daylight savings issue?

like image 244
user788171 Avatar asked Dec 28 '25 21:12

user788171


2 Answers

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.

like image 192
jxh Avatar answered Dec 31 '25 00:12

jxh


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.

like image 34
Willi Avatar answered Dec 31 '25 00:12

Willi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!