metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-11-14 04:50 pm

Временные зоны и epoch

Вопрос: зависит ли результат функции "вернуть количество секунд от epoch на начало сегодняшнего дня" от текущей таймзоны?
Я понял, что без поллитры вопрос таймзон, времен, календарей, а особенно хаскелевых модулей для работы с этим понять нереально.

PS: для начала сойдет:
import Data.Time.Clock
import Data.Time.Clock.POSIX

  do now<-getCurrentTime  
     let starttime = truncate $ utcTimeToPOSIXSeconds $ now {utctDayTime=0}

starttime - целое количество секунд.

Вообще говоря, я делаю либу для работы с RRDtool - она запускает исполняемый файл и кормит его командами через stdin, читая ответы через stdout. Как минимум, создать файло, заполнять его и рисовать графики оно уже умеет.

[identity profile] blacklion.livejournal.com 2011-11-14 02:02 pm (UTC)(link)
Нет. Потому что это время в секундах с события. А интервалы воремени )как изменряемые секундомером) не зависят от временных зон.

[identity profile] metaclass.livejournal.com 2011-11-14 02:04 pm (UTC)(link)
Время в секундах с события до второго события. И это второе, кажется, зависит от временной зоны.

[identity profile] blacklion.livejournal.com 2011-11-14 02:05 pm (UTC)(link)
epoch по определению в GMT. По этому результат функции "вернуть количество секунд от epoch на начало сегодняшнего дня" не зависит от текущей таймзоны.

[identity profile] greg fefelov (from livejournal.com) 2011-11-14 02:34 pm (UTC)(link)
Ну начало сегодняшнего дня в разных временных зонах в разный момент.

[identity profile] blacklion.livejournal.com 2011-11-14 02:35 pm (UTC)(link)
Да, но стартовое событие не привязано к местному времени вообще: полночь 1 января 1970 года в Гринвиче.

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:27 pm (UTC)(link)
окстись, у него же винда на компе!

[identity profile] blacklion.livejournal.com 2011-11-14 02:28 pm (UTC)(link)
И что? time_t time(timet *t) от этого не меняется.

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:30 pm (UTC)(link)
разумеется меняется, поскольку у винды время в cmos локальное, а не utc и она его сначала в utc перевести должна с правильной таймзоной.

[identity profile] blacklion.livejournal.com 2011-11-14 02:32 pm (UTC)(link)
У меня на всех серверах не под windows в CMOS тоже локальное. Определение time() от этого, повторю, не меняется.

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:36 pm (UTC)(link)
У меня на всех серверах не под windows в CMOS тоже локальное.

значит они у тебя в этом смысле от винды не отличается

Определение time() от этого, повторю, не меняется.

меняется, перечитай что я написал.

[identity profile] blacklion.livejournal.com 2011-11-14 02:37 pm (UTC)(link)
Меняется реализация, но не определение. Откуда его будет брать система и что учитывать — дело десятое. time() вызванный оджновременно на всех правильно настроенных машинах в мире должен вернуть одно и то же значение.

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:41 pm (UTC)(link)
сферический конь в вакууме.

на практике проверяют только что localtime == текущее время.
попадание в utc при этом происходит в двух случаях:

1) cmos в utc
2) cmos в localtime && timezone правильная.

как легко заметить, второй случай мало того, что сложнее, так еще и от timezone зависит (про что и спрашивалось)

[identity profile] blacklion.livejournal.com 2011-11-14 02:42 pm (UTC)(link)
Ещё раз: на вопрос зависит ли результат функции "вернуть количество секунд от epoch на начало сегодняшнего дня" от текущей таймзоны?
Правильный ответ: нет, не зависит. Но зависит от правильности настрйоки часов у компьютера, что может включать а может не включать настройку таймзоны.

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:46 pm (UTC)(link)
для винды -- включает.
т.е. что бы не зависело -- надо в первую очередь избавиться от винды

[identity profile] metaclass.livejournal.com 2011-11-14 03:02 pm (UTC)(link)
Я вообще спрашивал не про установку таймзоны в OS, а про реальную таймзону (что не обязательно одно и тоже) :)

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 03:07 pm (UTC)(link)
ой. реальная таймзона. и нереальная. или ирреальная? или виртуальная?

[identity profile] blacklion.livejournal.com 2011-11-14 02:41 pm (UTC)(link)
Несогласованность настроек аппаратных часов и таймзоны системы — это тоже самое что просто неправильно идущие часы.
Результат time(), разумеется, зависит от корректности локальных часов — но не от того, какая таймзона у машины.

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:42 pm (UTC)(link)
повторюсь: на практике проверяют только что localtime == текущее время.

[identity profile] blacklion.livejournal.com 2011-11-14 02:43 pm (UTC)(link)
На какой практике кто проверяет и что такое текущее время? :)

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:45 pm (UTC)(link)
гоблин, устанавливающий ос на компьютер.
текущее -- которое на настенных часах

[identity profile] blacklion.livejournal.com 2011-11-14 02:45 pm (UTC)(link)
а, ну так он может и на остановившиеся настенные час посмотреть.

[identity profile] blacklion.livejournal.com 2011-11-14 02:47 pm (UTC)(link)
И это вопрос корректной настройки системы а не семантики функции time() :)))

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:49 pm (UTC)(link)
в депедсах виндовой реализации time присутствует таймзона.
для юниксов существуют варианты инсталяции/настройки без такой зависимости.

т.е. для избавления от данной зависимости надо начинать с установки юникса