Я хочу создать struct tm
с часовым поясом Australia/Sydney
, поэтому сначала использую:
setenv("TZ","Australia/Sydney",1);
tzset()
затем я установил struct tm
как:
struct tm _tm;
_tm.tm_sec = 0;
_tm.tm_min = 45;
_tm.tm_hour = 7;
_tm.tm_mday = 18;
_tm.tm_mon = 8;
_tm.tm_year = 114;
Это должно быть время Австралии 2014/09/18 7:45:00, затем я звоню:
time_t other_tm = mktime(&_tm);
После этого звонка other_tm
и _tm
указали на 6:45 утра по австралийскому времени! Причина в том, что other_tm имеет значение 1410986700, которое вы можете проверить с помощью конвертера Epoc, оно действительно указывает на 6:45 утра, кто-нибудь знает, почему?
tm_isdst
на что-то неслучайное, это сработало? - person n. 1.8e9-where's-my-share m.   schedule 18.09.2014tm_isdst = -1
сработал. Итак, мораль этой истории в том, чтоsetenv
недостаточно, мне нужно установить этот флаг на -1, чтобыmktime
попытался выяснить, находится ли dst в местном часовом поясе. Спасибо. - person user2426361   schedule 18.09.2014