LINUX.ORG.RU

Странный скачок времени

 mktime,


0

2

Привет.

Может кто-нибудь объяснить скачок времени с 07.01.2009 00:00 на 06.01.2009 23:00 (или обратно)?

sergey@debian:~/dev/tzdata$ cat test.c
#include <time.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
        struct tm localTM;
        time_t t1, t2;

        localTM.tm_sec = 0;
        localTM.tm_min = 0;
        localTM.tm_hour = 0;
        localTM.tm_mday = 7;
        localTM.tm_mon = 0;
        localTM.tm_year = 109;

        t1 = mktime(&localTM);

        localTM.tm_mday = 6;
        localTM.tm_hour = 23;
        t2 = mktime(&localTM);

        printf("t1 == t2: %d\n", t1 == t2);

        return 0;
}
sergey@debian:~/dev/tzdata$ gcc -o test test.c
sergey@debian:~/dev/tzdata$ ./test
t1 == t2: 1
sergey@debian:~/dev/tzdata$ date +%Z
MSK


Последнее исправление: ksv (всего исправлений: 1)


Return Value

A time_t value corresponding to the calendar time passed as argument.
If the calendar time cannot be represented, a value of -1 is returned.



Может, там -1 возвращается в обоих случаях?

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

Это урезанный пример. В обоих случаях возвращается вполне конкретное число, соответствующее 06.01.2009 23:00 (или 07.01.2009 00:00 - еще не разобрался) (1231272000). Урезал для простоты.

ksv
() автор топика
Ответ на: комментарий от Ja-Ja-Hey-Ho

Угу, похоже на то. Причем, что самое интересное, mktime модифицирует структуру tm и изменяет tm_isdst на нуль. Последующие вызовы уже принимают localTM с корректным значением tm_isdst.

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