#include int main () { struct tm tmp_tm; time_t t; /* Set the time to 11 Apr 1992 18:30:00 (UTC). */ tmp_tm.tm_year = 92; tmp_tm.tm_mon = 3; tmp_tm.tm_mday = 11; tmp_tm.tm_hour = 18; tmp_tm.tm_min = 30; tmp_tm.tm_sec = 00; tmp_tm.tm_isdst = 0; /* Turn it into a time_t. */ putenv ("TZ=UTC"); t = mktime (&tmp_tm); /* Print it out as a UTC time. */ printf ("UTC Time : %s", ctime (&t)); /* Now print it out in local time in Asia/Bishkek timezone. */ putenv ("TZ=Asia/Bishkek"); printf ("Asia/Bishkek Time : %s", ctime (&t)); /* That outputs "Sun Apr 12 00:30:00 1992", which I don't think is a valid time in Asia/Bishkek, since the clock goes forward at 00:00 1 hour. The relevant Zone line (the last line in the zone) is: # Zone NAME GMTOFF RULES FORMAT [UNTIL] 5:00 Kirgiz KG%sT # Kirgizstan Time The relevant Rule line is: # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Kirgiz 1992 1996 - Apr Sun>=7 0:00 1:00 S So on 'Sun>=7 Apr 1992' (12 Apr 1992) at 0:00 local time clocks go forward 1 hour. Therefore local times between 0:00 and 1:00 should not exist. */ }