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] bambr77.livejournal.com 2011-11-14 01:53 pm (UTC)(link)
А "начало сегодняшнего дня" от таймзоны не зависит разве? Сколько-то секунд от 00:00 ГМТ до 00:00 наших проходит же :)

[identity profile] nealar.livejournal.com 2011-11-14 01:58 pm (UTC)(link)
Кто б мне рассказал, как там хотя бы без таймзон работать. С моей точки зрения, время бывает в двух форматах: строка "ч:м:с" либо число секунд (если хочется, то нецелое), но авторы либ всегда считают иначе.

Расскажите, а? Я вам за это песенку спою: http://prostopleer.com/search?q=artist%3A%D0%A4%D1%80%D0%BE%D0%BD%D1%82+track%3A%D0%9F%D0%B0%D1%83%D0%BA%D0%B8

[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] themech.livejournal.com 2011-11-14 02:22 pm (UTC)(link)
ребе решил написать Какти на хаскеле?

[identity profile] http://users.livejournal.com/_slw/ 2011-11-14 02:26 pm (UTC)(link)
нехуй пользоваться виндой

[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] metaclass.livejournal.com 2011-11-14 02:28 pm (UTC)(link)
Не, хочу график температуры и давления рисовать на линуксе и без вудуизма. А то он сейчас на F#+SQL+батники и rrdtool рисуется, меня это бесит.

[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] metaclass.livejournal.com 2011-11-14 02:32 pm (UTC)(link)
Оно, если по хорошему, должно единообразно работать и на линуксе и на винде.
Впрочем, какое время при этом должен показывать rrdtool, вопрос остается открытым - потому как температура на улице заметно зависит от локального времени, rrdtool внутри себя хранит все в utc, местным жителям надо показывать локальное время, а людям из других временных зон - вообще неизвестно что :)

[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:36 pm (UTC)(link)
У меня на всех серверах не под windows в CMOS тоже локальное.

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

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

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

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

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

[identity profile] metaclass.livejournal.com 2011-11-14 02:39 pm (UTC)(link)
Ну если getCurrentTime возвращает под линуксом utc из CMOS, а под виндой корректирует его на временную зону - почему бы и нет.

[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:41 pm (UTC)(link)
сферический конь в вакууме.

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

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

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

[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:42 pm (UTC)(link)
Ещё раз: на вопрос зависит ли результат функции "вернуть количество секунд от epoch на начало сегодняшнего дня" от текущей таймзоны?
Правильный ответ: нет, не зависит. Но зависит от правильности настрйоки часов у компьютера, что может включать а может не включать настройку таймзоны.

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

[identity profile] nealar.livejournal.com 2011-11-14 02:43 pm (UTC)(link)
когда cmos в utc. это с виндой вроде как невозможно
а с FBSD вроде как не нужно

Page 1 of 3