[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Программерам: как узнать разницу времени



В Пнд, 11/09/2006 в 16:52 +0400, Max Dmitrichenko пишет:
> В сообщении от 11 Сентябрь 2006 14:33 Покотиленко Костик написал(a):
>  
> > Всю жизнь использовал time().
> 
> Это зависит от задачи, которую решаешь. Вывести пользователю текущее время, то
> хватит и time().

Почти согласен.
 
> > Тебе какая почность то нужна?
> 
> Дело тут даже не в точности, а в адекватности. Если у тебя расхождение больше чем
> секунда, то это уже неадекватность.

Вполне возможно. Если не секрет, какая задача?

> > Кстати, прыжки времени (особенно сильные) это далеко не штатная ситуация, и
> > пытаться отследить их я бы не стал.
> 
> Не, ну нормально. Взял ты ноутбук. Прилетел в Нью-Йорк, сменил часовой пояс.
> Время прыг-скок и у тебя половина демонов накрылась. Потому что у них в доке
> написано, что переставлять время - это нештатная ситуёвина. Прикольно, да? :)
> Собственно, так как описанный сценарий мне ни разу в жизни не встречался, то
> беру на себя смелось заключить, что эта ситуация штатная.

Прикольно то, что дела обстоят не так, как Вы написали :)

Функция time() возвращает количество секунд с начала 1970 года в UTC
(GMT). И все нормальные программы с этим временем и работают. А вот
когда надо это время наружу выдать для пользователя (например в логи)
тогда идут в ход другие функции, которые переводят время в формат
удобочитаемый для пользователя (тут уже учитывается и часовой пояс и
локаль).

Так что, если Вы со своим ноутбуком прилетели в Нью-Йорк и сменили
часовой пояс то прыжёк времени Вы увидете в логах, выводе команды date и
т.п., но не увидете его в значении, возвращаемом time().

> > Тем более, что если стоит ntp, это некая гарантия, что прыжки не будут
> > превышать какую-то небольшую велечину.
> 
> Это никакая не гарантия. А если ntp был какое-то время в отключке? А если у
> тебя несколько дней не было сети? Первое же выравнивание времени после такого
> может реально скакнуть на дцать секунд.

Есть компьютеры, на которых время "уходит" более чем на секуду в сутки.
Мне они встречались не так уж и редко. На них, как бы Вы не крутили,
точную разницу Вы не пощитаете.

> > time() - это стандартное решение для всех (если не ошибаюсь) *unix*ов, и
> > не надо задумываться. Иначе можно дойти до програмного ECC памяти :-).
> 
> Не надо сравнивать действия юзера и ECC памяти. Если бы память была хоть в
> чём-то похоже на юзера, то плакали бы мы все горькими слезами. :) И молись,
> чтобы так никогда не стало.

По моему, проще пользоваться time() и постараться чтобы время не прыгало
(проверить железо, настроить ntpd).

-- 
Покотиленко Костик <casper@meteor.dp.ua>



Reply to: