LINUX.ORG.RU

mktime портит struct tm: баг или фича?


0

0

Прога проста как валенок:
//--------------------------------------------------
#include <stdio.h>
#include <time.h>
 
    struct tm ttmp;
    time_t tim;
int main()
{
 
 
        ttmp.tm_year=101; //2001
        ttmp.tm_mon=7; //august (8 - 1)
        ttmp.tm_mday=28; //my birthday
        ttmp.tm_hour=00;
        ttmp.tm_min=01;
        ttmp.tm_sec=04;
        printf("%02d:%02d:%02d\n",ttmp.tm_hour,ttmp.tm_min,ttmp.tm_sec);
        tim=mktime(&ttmp);
        printf("%02d:%02d:%02d\n",ttmp.tm_hour,ttmp.tm_min,ttmp.tm_sec);
 
    return 0;
}
//---------------------------------------------------
Результат работы ошеломляет.

$ g++ testtime.cc -o testtime && ./testtime
00:01:04
01:01:04                                                                                              

то есть mktime тизменяет ttmp весьма странным образом.
Где вилы? и как это обойти?
(по дате и времени правильно собрать время типа time_t)


Заранее спасибо,
Ростислав
anonymous

Все просто!
структура "tm" - содержит также поле "tm_isdst" - которое суть
есть - зимнее/летнее время!

//- cut from mktime -------

The original value of tm_isdst is interpreted as follows:

negative
this field is computed as well.
0
daylight savings time is not in effect
positive
daylight savings time is in effect

Whenever mktime() is called, the tzset() function is also called.
//--- end cut ------------

таким образом :
ttmp.tm_isdst = 1;
все вылечит!

не переживай! на эти грабли наступали все :)))

alexnav
()

Вообще-то, более распространненая практика присваивать значение -1 = пусть само посчитает :)

BaT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.