Вычисление секунд "на завтра".

Модератор: Модераторы разделов

Аватара пользователя
Zeus
Сообщения: 694

Вычисление секунд "на завтра".

Сообщение Zeus »

Используются функции и структуры данных заголовочного файла time.h
Дано: текущее время (количество секунд - unix-time, короче).
Требуется: получить unix-time на ЭТО ЖЕ время, но на следующий день.
С учётом переводов на летнее-зимнее время.

Кто как это делает?

"Вводная", так сказать:
Сначала (пока не столкнулся с ошибкой) я делал просто: прибавлял 24*60*60 секунд к unix-time'у.
Но при осеннем переводе времени у меня получилось, что событие (которому я сопоставил это время) отработало на час раньше.
Я перевёл эти секунды в struct tm - действительно час получился меньше.
Тогда я попробовал работать с этой же структурой: у неё для дней предусмотрено 3 поля (tm_wday, tm_mday и tm_yday)
Получаю текущее время, перевожу его в tm, прибавляю день и перевожу обратно в секунды.
Если прибавить к tm_wday или к tm_yday, то вообще ничего не меняется - те же самые секунды, будто день и не прибавлял.
Если же прибавить день к tm_mday, то повторяется ошибка с одним часом: осенью на час раньше, весной - на час позже.
Пока решил по-извращенски:
прибавляю день к tm_mday, преобразую в unix-time, потом обратно в tm, устанавливаю нужный час и преобразую назад в unix-time.
Криво как-то, но работает.

Так вот вопрос: может у кого более красивое решение есть?
Спасибо сказали:
Аватара пользователя
d_Sun
Сообщения: 291

Re: Вычисление секунд "на завтра".

Сообщение d_Sun »

Zeus писал(а):
17.09.2006 22:56
Так вот вопрос: может у кого более красивое решение есть?


Код: Выделить всё

  void get_tomorrow_date( struct timeval *date )
  {
     sleep( 86400 ); // 60 * 60 * 24
     gettimeofday( date, 0 );
  }


:D Сорри - можно удалять... :)
Моя подпись сильно длинная :)
Спасибо сказали:
Аватара пользователя
Sniff
Сообщения: 330
ОС: Debian Lenny

Re: Вычисление секунд "на завтра".

Сообщение Sniff »

Zeus почему криво-то? Нормально, в духе настоящих программистов :)

кстати священное число 86400 должен знать каждый :)
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Вычисление секунд "на завтра".

Сообщение Zeus »

Sniff писал(а):
18.09.2006 13:48
кстати священное число 86400 должен знать каждый :)

Лениво помнить - пусть компилер думает :)
Спасибо сказали:
Kirill Frolov
Сообщения: 6
ОС: Debian

Re: Вычисление секунд "на завтра".

Сообщение Kirill Frolov »

Zeus писал(а):
17.09.2006 22:56
Используются функции и структуры данных заголовочного файла time.h
Дано: текущее время (количество секунд - unix-time, короче).
Требуется: получить unix-time на ЭТО ЖЕ время, но на следующий день.
С учётом переводов на летнее-зимнее время.

Но при осеннем переводе времени у меня получилось, что событие (которому я сопоставил это время) отработало на час раньше.


Бугага. В сутках, в общем случае, не 86400 секунд. И зависит это, от чего угодно,
вплоть до отдельного на это решения ЦК партии и лично Генерального Секретаря.
Надо понимать.

Пока решил по-извращенски:
прибавляю день к tm_mday, преобразую в unix-time, потом обратно в tm, устанавливаю нужный час и преобразую назад в unix-time.


Как вариант -- сформатировать в ISO-8601 (strftime), распарсить его, прибавить там день (скорректировав месяц и год -- что не так уж и тривиально), распарсить обратно (strptime).

Так вот вопрос: может у кого более красивое решение есть?


Вряд ли.
Спасибо сказали: