Conversion of time-string to Unix time


Alexander Liss




A usual way of conversion of time-string as 03/27/2006-15:55 to Unix time (a number of seconds from Epoch time_t) is via a combination of strptime and mktime.

The function strptime converts a string into structure tm, and mktime converts this structure into Unix time.

To account for Daylight Savings Time (DST), there is a member in this structure tm_isdst. When it is zero no DST, when it is 1 there is DST.

Function mktime according to its description is smart, and should correct values of this structure; supposedly it should correct tm_isdst, when it is not set right.

When tm_isdst is set to -1 we explicitly request such correction.

Unfortunately, strptime only clears tm_isdst, it does not set it properly. When tm_isdst is zero, mktime does not check for DST and does not correct the structure. This behavior is not clear from functions description.

The working sequence of calls: strptime, set tm_isdst to -1, mktime.