[PLUG] Question on mktime() results

logical american website.reader3 at gmail.com
Tue Jan 26 01:23:26 UTC 2016


To C geeks:

Could someone who has freetime on their linux system compile the 
following C program and see if they can duplicate these results?
I found a strange 422 second difference between the 2 times.

mktime-discrepancy.c
-----------------------------------------
#include <time.h>
#include <stdio.h>
#include <string.h>

int main() {

     char pacific_timezone[8] = "PST8PDT";
     char * timezone = &pacific_timezone[0];

     // Date: November 18, 1883 12:07:01 am PST

     struct tm first_tm;
     first_tm.tm_sec = 01;
     first_tm.tm_min = 07;
     first_tm.tm_hour = 12;
     first_tm.tm_mday = 18;
     first_tm.tm_mon = 10; // November
     first_tm.tm_year = -17; // 1883
     first_tm.tm_wday = 0; // Sunday
     first_tm.tm_yday = 321;
     first_tm.tm_isdst = 0;
     first_tm.tm_gmtoff = -28800;
     first_tm.tm_zone = timezone;

     // Date: November 18, 1883 12:07:02 am PST

     struct tm second_tm;
     second_tm.tm_sec = 02;
     second_tm.tm_min = 07;
     second_tm.tm_hour = 12;
     second_tm.tm_mday = 18;
     second_tm.tm_mon = 10; // November
     second_tm.tm_year = -17; // 1883
     second_tm.tm_wday = 0; // Sunday
     second_tm.tm_yday = 321;
     second_tm.tm_isdst = 0;
     second_tm.tm_gmtoff = -28800;
     second_tm.tm_zone = timezone;

     time_t first_time = mktime(&first_tm);
     time_t second_time = mktime(&second_tm);

     printf( "first struct tm object dump: %d %d %d %d %d %d %d %d %d 
%ld %s\n", first_tm.tm_sec, first_tm.tm_min, first_tm.tm_hour, 
first_tm.tm_mday, first_tm.tm_mon, first_tm.tm_year, first_tm.tm_wday, 
first_tm.tm_yday, first_tm.tm_isdst, first_tm.tm_gmtoff, first_tm.tm_zone);

     printf( "second struct tm object dump: %d %d %d %d %d %d %d %d %d 
%ld %s\n", second_tm.tm_sec, second_tm.tm_min, second_tm.tm_hour, 
second_tm.tm_mday, second_tm.tm_mon, second_tm.tm_year, 
second_tm.tm_wday, second_tm.tm_yday, second_tm.tm_isdst, 
second_tm.tm_gmtoff, second_tm.tm_zone);

     printf( "First time tick: %ld Second time tick: %ld Difference: %ld 
secs.  Should be -1 seconds instead.\n",first_time, second_time, 
first_time-second_time);

     printf( "Is this discrepancy due to the 7 min 2 sec difference 
between PST and Local Mean Time (Solar Time) ?\n");

     return (0);
}




More information about the PLUG mailing list