mktime
dma198; 4.4.00
Все компиляторы C с которыми я встречался выдают
в нижепреведенном коде одинаковое время.
В WinCC C-Script после mktime получается время
на 1 час большее чем задавалось.
Что это? bug в интерпретаторе?
///////////////////////////////////////////
#include "stdio.h"
#include "string.h"
#include "time.h"
main()
{
time_t t;
struct tm *tt,tt1;
time(&t);
tt=localtime(&t);
printf("Current time %02d/%02d/%04d %02d:%02d:%02d\n",
tt->tm_mday,tt->tm_mon+1,tt->tm_year+1900,
tt->tm_hour,tt->tm_min,tt->tm_sec);
tt1.tm_mday=tt->tm_mday;
tt1.tm_mon=tt->tm_mon;
tt1.tm_year=tt->tm_year;
tt1.tm_hour=tt->tm_hour;
tt1.tm_min=tt->tm_min;
tt1.tm_sec=tt->tm_sec;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
t=mktime(&tt1); //чтобы данный кусок кода
// работал корректно в WinCC
// почему то нужно писать:
// t=mktime(&tt1)-3600;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
tt=localtime(&t);
printf("Converted time %02d/%02d/%04d %02d:%02d:%02d\n",
tt->tm_mday,tt->tm_mon+1,tt->tm_year+1900,
tt->tm_hour,tt->tm_min,tt->tm_sec);
}
Re: mktime - флаг DST
Евгений Трунов; 6.11.01
Это из-за того, что WinCC-шный mktime разделяет понятие летнего и
зимнего времени, и использует признак tm_isdst, который при
несовпадении с флажком "Учесть переход на летнее время" Windows NT
приводит к описанному эффекту.