Аналог difftime

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
tuzik87@inbox.ru

Аналог difftime

Сообщение tuzik87@inbox.ru »

Есть ли во Free Pascal RTL аналог Сишной функции difftime?
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

dateutils
{ ---------------------------------------------------------------------
Period functions.
---------------------------------------------------------------------}

Function YearsBetween(const ANow, AThen: TDateTime): Integer;
Function MonthsBetween(const ANow, AThen: TDateTime): Integer;
Function WeeksBetween(const ANow, AThen: TDateTime): Integer;
Function DaysBetween(const ANow, AThen: TDateTime): Integer;
Function HoursBetween(const ANow, AThen: TDateTime): Int64;
Function MinutesBetween(const ANow, AThen: TDateTime): Int64;
Function SecondsBetween(const ANow, AThen: TDateTime): Int64;
Function MilliSecondsBetween(const ANow, AThen: TDateTime): Int64;
tuzik87@inbox.ru

Сообщение tuzik87@inbox.ru »

sign, Спасибо за ответ
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

tuzik87@inbox.ru
С одним "но". Система представления дат в FPC совершенно не учитывает временные зоны, летнее время и прочее. И потому SecondsBetween(const ANow, AThen: TDateTime) может дать неправильный результат и, соответственно, результат, отличающийся от difftime();

TDateTime - "мемориальное" абстрактное время, непригодное для отметок времени по сути.
time_t - unix timestamp, всегда в UTC. Правильное представление. :D
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

tuzik87@inbox.ru
С учетом того, что написал SSerge, если это для вас существенно, то есть пакет PascalTZ - "Pascal Time Zone". Правда я сам с ним не работал, так что больше ничего сказать не могу.

UPD.
Досмотрел там же в конце:
Since 2.6.2, FPC has the functions LocalTimeToUniversal and UniversalTimeToLocal in the dateutils unit to convert between local time and UTC time. These functions can be useful and an alternative for PascalTZ if you are not interested in historical/future date/times (i.e. the functions use current daylight saving time etc to convert to/from UTC time).
Возможно, что этого достаточно.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

LocalTimeToUniversal and UniversalTimeToLocal in the dateutils работают с временными зонами и их установками только на момент запуска программы. По крайней мере, было так, когда я последний раз смотрел их код

Добавлено спустя 8 минут 51 секунду:
т.е.:
на момент запуска берется текущее смещение временной зоны;
в дальнейшем именно оно применяется для преобразования, без учета каких либо исторических изменений и переходов.

ЗЫ: кстати, windows - реализации как СИ, так и .NET в своих временных функциях "видят" только правила работы с временем текущего года, и не более. :evil: Для размышления. Сишный timetolocal() тоже нещадно лажает под win.
tuzik87@inbox.ru

Сообщение tuzik87@inbox.ru »

Спасибо за ответы. Чтобы не плодить темы еще задам вопрос про ExecuteProcess. Третьим параметром эта функция берет флаги. Где найти их описание?
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

SSerge писал(а):кстати, windows - реализации как СИ, так и .NET в своих временных функциях "видят" только правила работы с временем текущего года, и не более.

А *nix'ы знают всё историю изменения правил времени за всю человеческую историю? :roll:
Не, я не подъелдыкиваю, я весьма в них слаб, я и вправду не знаю.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

Снег Север писал(а):А *nix'ы знают всё историю изменения правил времени за всю человеческую историю?


nix'ы тоже разные. Однако, под линуксами (не берем во внимание всякие сверхмалые дистрибутивы и дистрибутыивы роутеров и прочего с похеренной локализацией) история изменений правил применяется ровно настолько, насколько ее вписали в файлики tzone. То есть, если программа конвертировала даты из этой зоны в timestamp в 2014-м, то и в 2015-м она для этого timestamp и этой зоны возвратит корректное значение локальной даты. В отличие от W. У явы, кстати, работа с временными зонами отделена от ОС, и виртуальная машина несет все функции на себе, что особо не афишируется. Прошлый год был поэтому эпический - текущие обновления явы никак не затрагивали обновления временных зон, их надо было обновлять специальным инсталлятором. Что саом по себе подарок для тех, кто такого не ожидал.

Добавлено спустя 1 минуту 18 секунд:
fpc под линуксами с датами лажает так же, как и под windows.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

SSerge
Спасибо за разъяснение.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

tuzik87@inbox.ru писал(а):Спасибо за ответы. Чтобы не плодить темы еще задам вопрос про ExecuteProcess. Третьим параметром эта функция берет флаги. Где найти их описание?


в документации, в документации
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Снег Север писал(а):
SSerge писал(а):кстати, windows - реализации как СИ, так и .NET в своих временных функциях "видят" только правила работы с временем текущего года, и не более.

А *nix'ы знают всё историю изменения правил времени за всю человеческую историю? :roll:
Не, я не подъелдыкиваю, я весьма в них слаб, я и вправду не знаю.

Хотите увидеть самые точные правила?
Тогда вам к астрологам.
Это не шутка.
Никакая астрологическая программа не может существовать без точного расчёта времени.
Это у астрологов основа основ.
На сегодня, самые полные таблицы преобразований, временных зон по годам, это программа ZET.
Кстати написанная на какой-то старой версии Delphi.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

sign писал(а):На сегодня, самые полные таблицы преобразований, временных зон по годам, это программа ZET.
Спасибо, про астрономические вычисления и работу там с датами я в курсе. Даже сам немного с этим имел дело. Мой вопрос был немного не о том, и SSerge мне именно на него ответил.
Ответить