Timestamp

Модератор: Модераторы

Timestamp

Сообщение Sharfik » 14.11.2014 17:19:18

Никак не пойму, результат функции DateToUnix() является значением Timestamp, т.е. регионо независимым или нет? Unix время при расчете начинается от 1970 года вроде, но оно как привязано к региону?
Sharfik
энтузиаст
 
Сообщения: 508
Зарегистрирован: 20.07.2013 01:04:30

Re: Timestamp

Сообщение *Rik* » 14.11.2014 22:24:59

Это значение вычисляется из текущих показаний часов вашего компьютера. Результатом функции DateTimeToUnix - будет целочисленное значение содержащее количество секунд прошедшее с полуночи (00:00:00 UTC) 1 января 1970 года (четверг); время с этого момента называют «эрой UNIX». В любом случае все расчеты основываются на показаниях часов вашего компьютера и возвращаемое значение - один из возможных вариантов хранения даты-времени в виде целочисленного значения.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 383
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Timestamp

Сообщение SSerge » 15.11.2014 05:33:05

Sharfik
Коллега, вам это попадалось на глаза: viewtopic.php?f=1&t=10027 ?

А по сути - следующее.

DateToUnix напрямую из локального времени не имеет смысла вообще. Потому что "................Результатом функции DateTimeToUnix - будет целочисленное значение содержащее количество секунд прошедшее с полуночи (00:00:00 UTC) 1 января 1970 года" - а подставляется дата НЕ В UTC. Результат будет смещен на величину смещения временной зоны на текущий момент. Различные UNIXы свой TimeStamp клепают только по времени UTC. Чтобы сработало правильно, нужно следующую конструкцию: DateTimeToUnix(LocalTimeToUniversal(date_now))

... и вот здесь следует учитывать, что все это в сущности верно только для промежутка времени с момент последнего изменения временных зон локали до текущего момента Функция LocalTimeToUniversal ничего не знает о переводах стрелок в прошлом и будущем, об изменениях временных поясов для зоны и т.п. - т.е. для работы с датой в произвольном периоде - непригодна абсолютно.

Добавлено спустя 13 минут 47 секунд:
p/s Заодно стоит задуматься над тем, что различные вычисления количества секунд, минут, часов а иногда дней между двумя датами TDateTime, располагающимися в моменты разных смещений относительно UTC, с помощью функций RTL freepascal (а возможно и Delphi), дадут неверный результат

Добавлено спустя 24 минуты 6 секунд:
Вот еще повод для размышлений о соответствиях времен.

26 октября в 2:00 стрелки переводятся на час назад. То есть внезапно после 2014-10-26 01:59:59 наступает 2014-10-26 01:00:00
Контрольный выстрел в голову: в какой unix timestamp должно быть преобразовано время 2014-10-26 01:30:00 на момент запуска программы в 2014-12-01 00:00:00 :mrgreen:
SSerge
энтузиаст
 
Сообщения: 867
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Timestamp

Сообщение Vapaamies » 15.11.2014 10:58:46

SSerge писал(а):в какой unix timestamp должно быть преобразовано время 2014-10-26 01:30:00 на момент запуска программы в 2014-12-01 00:00:00 :mrgreen:

Об этом наверняка в стандартах ISO об исчислении времени написано.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 270
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: Timestamp

Сообщение SSerge » 15.11.2014 12:33:01

Vapaamies писал(а):Об этом наверняка в стандартах ISO об исчислении времени написано.


Несмотря на то, что там написано, мы имеем два различных момента времени, выражаемых одинаковой записью без какой либо возможности их различить. Вот почему перевод UTC в местное время и обратно - процедура действительная только на момент этого перевода, и время перевода - только текущее и никак иначе. :mrgreen: А иначе - сюрпризы различные.

Так что, правильный unux timestamp - метка действительно уникальная и не повторяющаяся, а TDateTime в любых ее проявлениях - корректна только с большими оговорками на период действия, на зону применения, информации о которой в ней нет и ... на манипуляции с поясным временем, включая различные летние и зимние времена.
SSerge
энтузиаст
 
Сообщения: 867
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Timestamp

Сообщение Sharfik » 15.11.2014 14:57:32

Чем дальше в лес, тем толще партизаны(((
Спасибо всем.
Где то можно найти информацию о всех корректировках времени, чтобы свои функции написать, нет?
Sharfik
энтузиаст
 
Сообщения: 508
Зарегистрирован: 20.07.2013 01:04:30

Re: Timestamp

Сообщение SSerge » 15.11.2014 16:23:41

Sharfik писал(а):Где то можно найти информацию о всех корректировках времени, чтобы свои функции написать, нет?


Абсолютный первоисточник:

http://www.iana.org/time-zones

В скомпилированном виде эта же информация есть в любом линуксе, для действующей зоны это файлик /etc/localtime - т.е. стандартные функции работы со временем линукса знают о всех переводах стрелок
SSerge
энтузиаст
 
Сообщения: 867
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru