Столкнулся с тем, что в интаче нету такого типа как дата. Все измеряем в секундах, прошедших с 1.01.1970 00:00. При этом отсутствует какая либо стандартная функция получения из произвольной даты этого числа. Делюсь своим опытом. Может кто поможет оптимизировать.
===========================
Функция IntgTime (Hours:integer,Minutes:integer,Seconds:integer,Day:integer, Mounth:integer, Year:integer)
===========================
Возвращает значение в секундах, прошедшее с 00:00 01.01.1970
===========================
DIM TIMEVALUE AS REAL;
{Определяем сколько прошло полных лет с 1970 года в секундах}
TIMEVALUE= (Year - 1970) * 365 * 24 * 60 * 60 + Round((Year - 1970)/4,1)*24*60*60;
IF Year MOD 4 == 0 THEN TIMEVALUE= TIMEVALUE - 24*60 *60; ENDIF;
{определяем случай если у нас текущий год високосный и есть необходимость добваить лишние сутки}
IF (Year MOD 4 == 0)AND(Mounth >=3)
THEN
TIMEVALUE = TIMEVALUE + 24*60*60;
ENDIF;
{Добавляем количество полных месяцев}
IF Mounth == 2 THEN TIMEVALUE = TIMEVALUE + 31 * 24 * 60 * 60;ENDIF;
IF Mounth == 3 THEN TIMEVALUE = TIMEVALUE + 59 * 24 * 60 * 60;ENDIF;
IF Mounth == 4 THEN TIMEVALUE = TIMEVALUE + 90 * 24 * 60 * 60;ENDIF;
IF Mounth == 5 THEN TIMEVALUE = TIMEVALUE + 120 * 24 * 60 * 60;ENDIF;
IF Mounth == 6 THEN TIMEVALUE = TIMEVALUE + 151 * 24 * 60 * 60;ENDIF;
IF Mounth == 7 THEN TIMEVALUE = TIMEVALUE + 181 * 24 * 60 * 60;ENDIF;
IF Mounth == 8 THEN TIMEVALUE = TIMEVALUE + 212 * 24 * 60 * 60;ENDIF;
IF Mounth == 9 THEN TIMEVALUE = TIMEVALUE + 243 * 24 * 60 * 60;ENDIF;
IF Mounth == 10 THEN TIMEVALUE = TIMEVALUE + 273 * 24 * 60 * 60;ENDIF;
IF Mounth == 11 THEN TIMEVALUE = TIMEVALUE + 304 * 24 * 60 * 60;ENDIF;
IF Mounth == 12 THEN TIMEVALUE = TIMEVALUE + 334 * 24 * 60 * 60;ENDIF;
{Добавляем дни, часы, минуты, секунды}
TIMEVALUE = TIMEVALUE + (Day - 1) * 24 * 60 * 60 + Hours * 60 *60 + Minutes * 60 + Seconds;
RETURN TIMEVALUE;
===========================
Для чего это нужно.
Производственная задача. Необходимо чтобы на историческом тренде выводился суточный, недельный, месячный график начиная с произвольного времени и даты по нажатию на кнопку. Стартовое время\дата выбираются из комбо-боксов.
Решение.
Используем
1. HistTrend.ChartStart (вместе с вышепреведенной функцией) для определения начала графика;
2. HistTrend.ChartLength - для определения длины графика.