localtime
is not thread safe, so you might experience troubles if you are calling it from different threads (is your the trace tool multithreaded?)
On my Linux box, the code
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define trace printf
#define _T(s) s
void TraceTime( time_t tv )
{
struct tm * ptm = localtime( &tv );
trace( _T( "now is %ld\n" ), tv );
trace( _T( "year = %2d\n" ), ptm->tm_year - 100 );
trace( _T( "month = %2d\n" ), ptm->tm_mon );
trace( _T( "day = %2d\n" ), ptm->tm_mday );
trace( _T( "hour = %2d\n" ), ptm->tm_hour );
trace( _T( "min = %2d\n" ), ptm->tm_min );
trace( _T( "sec = %2d\n" ), ptm->tm_sec );
}
void DoLocaltimeTest()
{
time_t now2 = 1553987249;
time_t now1 = 1553123249;
trace( _T( "time 1 data :\n" ) );
TraceTime( now1 );
trace( _T( "time 2 data :\n" ) );
TraceTime( now2 );
long long diff = now2 - now1;
trace( _T( "difference in times is %lld seconds\n" ), diff );
}
int main()
{
DoLocaltimeTest();
return 0;
}
behaves correctly
time 1 data :
now is 1553123249
year = 19
month = 2
day = 21
hour = 0
min = 7
sec = 29
time 2 data :
now is 1553987249
year = 19
month = 2
day = 31
hour = 0
min = 7
sec = 29
difference in times is 864000 seconds