[PLUG] Question on mktime() results - not the unset TZ variable causing the problem
Russell Senior
russell at personaltelco.net
Wed Jan 27 08:10:46 UTC 2016
> Steve:
> Same result, so it's not the TZ environmental variable.
>
> #include<time.h>
> #include<stdio.h>
> #include<stdlib.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;
>
> clearenv();
> const char* TZ = "TZ";
> const char* LA = "/usr/share/zoneinfo/America/Los_Angeles";
> setenv(TZ,LA,1);
try setenv(TZ,timezone,1) instead of the zoneinfo path
> char * gotit = getenv(TZ);
> printf( "TZ: %s\n",gotit);
>
> 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);
> }
--
Russell Senior, President
russell at personaltelco.net
More information about the PLUG
mailing list