Главная » Free Pascal » Измерение интервалов времени Free Pascal

0

В задачах оперативного и долгосрочного планирования довольно часто прихо- дится определять длительность интервалов между двумя календарными датами dt1 и dt2, вычислять даты, отстоящие от заданной точки отсчета на указанный интер- вал времени вперед или назад.

В составе модуля DateUtils присутствуют две группы функций, вычисляющих разницу между двумя датами типа TDateTime в различных единицах измерения ин- тервалов времени и выдающих результат либо в виде целого числа, либо в виде приближенного значения типа double. В первом случае значение функции соответ- ствует полному числу единиц измерения, полученному путем выделения соответ- ствующих компонентов и отбрасывания дробной части их разности. Названия та- ких функций начинаются с единицы измерения и заканчиваются словом Between (между). Во втором случае имя функции также начинается с единицы измерения временного интервала и заканчивается словом Span (промежуток времени). Пере- чень этих функций приведен в табл. 14.9.

Таблица 14.9

Формат обращения

Пояснение

IdY:=YearsBetween(dt1,dt2); DdY:=YearSpan(dt1,dt2);

Разница в годах (Integer), разница в годах (Double)

IdM:=MonthsBetween(dt1,dt2); DdM:=MonthSpan(dt1,dt2);

Разница в месяцах (Integer), разница в месяцах (Double)

Таблица 14.9 (окончание)

Формат обращения

Пояснение

IdW:=WeeksBetween(dt1,dt2); DdW:=WeekSpan(dt1,dt2);

Разница в неделях (Integer), разница в неделях (Double)

IdD:=DaysBetween(dt1,dt2); DdD:=DaySpan(dt1,dt2);

Разница в днях (Integer), разница в днях (Double)

IdH:=HoursBetween(dt1,dt2); DdH:=HourSpan(dt1,dt2);

Разница в часах (Int64), разница в часах (Double)

IdM:=MinutesBetween(dt1,dt2); DdM:=MinuteSpan(dt1,dt2);

Разница в минутах (Int64), разница в минутах (Double)

IdS:=SecondsBetween(dt1,dt2); DdS:=SecondSpan(dt1,dt2);

Разница в секундах (Int64), разница в секундах (Double)

IdMls:=MilliSecondsBetween(dt1,dt2); DdMls:=MilliSecondSpan((dt1,dt2);

Разница в миллисекундах (Int64), разница в миллисекундах (Double)

При вычислении разницы в месяцах и годах используются следующие прибли- женные значения:

ApproxDaysPerMonth : Double = 30.4375 // среднее число дней в месяце ApproxDaysPerYear : Double = 365.25  // среднее число дней в году

Следующую группу из 30 подпрограмм составляют функции, вычисляющие интервалы времени, отсчитываемые в разных единицах от начала соответствующе- го фрагмента даты — от начала года, месяца, недели, дня, часа, минуты, секунды. Их названия составлены из полных английских фраз, четко раскрывающих смысл возвращаемого значения (табл. 14.10). В дополнение к своему основному назначе- нию некоторые функции извлекают из даты те или иные компоненты.

Таблица 14.10

Формат обращения

Пояснение

M:=MonthOfTheYear(dt);

Число месяцев с начала года

W:=WeekOfTheYear(dt); W:=WeekOfTheYear(dt,Year); W:=WeekOfTheMonth(dt); W:=WeekOfTheMonth(dt,Year,Month);

Число недель с начала года, то же + извлечение года,

число недель с начала месяца,

то же + извлечение года и месяца

D:=DayOfTheYear(dt); D:=DayOfTheMonth(dt); D:=DayOfTheWeek(dt);

Число дней с начала года, число дней с начала месяца, число дней с начала недели

H:=HourOfTheYear(dt); H:=HourOfTheMonth(dt); H:=HourOfTheWeek(dt); H:=HourOfTheDay(dt);

Число часов с начала года, число часов с начала месяца, число часов с начала недели, число часов с начала дня

Таблица 14.10 (окончание)

Формат обращения

Пояснение

M:=MinuteOfTheYear(dt); M:=MinuteOfTheMonth(dt); M:=MinuteOfTheWeek(dt); M:=MinuteOfTheDay(dt); M:=MinuteOfTheHour(dt);

Число минут с начала года, число минут с начала месяца, число минут с начала недели, число минут с начала дня, число минут с начала часа

S:=SecondOfTheYear(dt); S:=SecondOfTheMonth(dt); S:=SecondOfTheWeek(dt); S:=SecondOfTheDay(dt); S:=SecondOfTheHour(dt); S:=SecondOfTheMinute(dt);

Число секунд с начала года, число секунд с начала месяца, число секунд с начала недели, число секунд с начала дня, число секунд с начала часа, число секунд с начала минуты

M:=MilliSecondOfTheYear(dt); M:=MilliSecondOfTheMonth(dt); M:=MilliSecondOfTheWeek(dt); M:=MilliSecondOfTheDay(dt); M:=MilliSecondOfTheHour(dt); M:=MilliSecondOfTheMinute(dt); M:=MilliSecondOfTheSecond(dt);

Число миллисекунд с начала года, число миллисекунд с начала месяца, число миллисекунд с начала недели, число миллисекунд с начала дня, число миллисекунд с начала часа, число миллисекунд с начала минуты, число миллисекунд с начала секунды

Аргументом всех этих функций является дата в формате TDateTime. В зависи- мости от диапазона соответствующих значений функции возвращают результат от типа Word до типа Int64.

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии