Местное время или UTC?Если это UTC, самый простой способ сделать это - полностью избежать API времени C и использовать формулу в POSIX в течение нескольких секунд с начала эпохи:
tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 +
(tm_year-70)*31536000 + ((tm_year-69)/4)*86400 -
((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400
Источник: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15
Если это местное время, проблема превращается в ад из-за того, что time_t
не гарантируется быть представленным в секундах с начала эпохи, за исключением систем POSIX, и из-за того, что трудно вычислить значение time_t
, соответствующееэпоха (mktime
не будет работать, потому что она использует местное время).Однако, как только вы вычислили time_t
для эпохи, нужно просто использовать mktime
для значения времени, которое вы проанализировали, и затем вызвать difftime
.