Летнее время
От: Rockoos  
Дата: 20.11.09 12:03
Оценка:
Всем привет!

Не поскажите как убрать переход на летнее время? Сразу в поиск не отсылайте, там смотрел, не нашел подходящего кода для своего случая

Проблема следующая:
У меня есть time_t переменная, я ее перевожу в tm, после этого конвертирую в строку с помощью strrtime. В результате вместо 00 часов после перехода на летнее время всегда получается 01.

time_t mDate;
char Temp[20];
.............

tm* DM = localtime(&m_Date);
strttime(Temp, 20, %d.%.m.&Y %H:%M:%S, DM);

Мне нужно избавиться от +1 час, при этом нужно использовать ТОЛЬКО POSIX функции, т.к. код может компилиться как в винде так и в юниксе. Убирать галку в настройках винды на время работы программы тоже не выход, т.к. в это время др. программы могут использовать фунции времени и будут получать неверный результат при конвертации. Пробовал менять переменную _daylight в 0 — не помогает, видимо, приложениие консольное и переменная окружения для таймзоны не выставлена, соотведственно функции берут системные настройки(пробовал получать таймзону возвращается значение по умолчанию).

Я конечно могу сам собирать строку из tm или сделать копию DM, вычесть в ней час и сконвертировать строку, но очень не хочится писать пол тонны проверок и т.п., да и медленно это. Хотелось бы узнать нормальный способ избавиться от летнего время.

Если кто сталкивался с этой проблемой помогите плиз...
Re: Летнее время
От: andrey.desman  
Дата: 20.11.09 12:37
Оценка:
Здравствуйте, Rockoos, Вы писали:

R>Всем привет!

R>Не поскажите как убрать переход на летнее время? Сразу в поиск не отсылайте, там смотрел, не нашел подходящего кода для своего случая

http://www.cplusplus.com/reference/clibrary/ctime/gmtime/
Re: Летнее время
От: andrey.desman  
Дата: 20.11.09 12:49
Оценка:
Здравствуйте, Rockoos, Вы писали:

R>Если кто сталкивался с этой проблемой помогите плиз...


Ну или
t = localtime(time);
t->tm_isdst > 0 && --t->tm_hour;
time = mktime(t);
t = localtime(time);
Re[2]: Летнее время
От: andrey.desman  
Дата: 20.11.09 12:55
Оценка: 32 (1)
Здравствуйте, andrey.desman, Вы писали:

AD>Ну или

AD>
AD>t = localtime(time);
t->>tm_isdst > 0 && --t->tm_hour;
AD>time = mktime(t);
AD>t = localtime(time);
AD>


Или так:
t = localtime(time);
t->tm_isdst > 0 && (t = localtime(time - 3600));
Re[3]: Летнее время
От: Rockoos  
Дата: 21.11.09 12:02
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Здравствуйте, andrey.desman, Вы писали:


AD>>Ну или

AD>>
AD>>t = localtime(time);
t->>>tm_isdst > 0 && --t->tm_hour;
AD>>time = mktime(t);
AD>>t = localtime(time);
AD>>


AD>Или так:

AD>
AD>t = localtime(time);
t->>tm_isdst > 0 && (t = localtime(time - 3600));
AD>


Громадное спаибо!!!!
Обидно, что сам не догодался, все так просто
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.