Получить дату в числовом формате

Вопросы, не попадающие в другие разделы.

Получить дату в числовом формате

Сообщение ValFLash » Вт сен 22, 2009 12:24 am

Столкнулся с тем, что в интаче нету такого типа как дата. Все измеряем в секундах, прошедших с 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 - для определения длины графика.
ValFLash
 
Сообщения: 5
Зарегистрирован: Чт сен 17, 2009 3:40 am

Сообщение skom » Ср сен 23, 2009 9:24 am

Для этого есть функция DateTimeGMT().
86400 = кол-во секунд в сутках.
Например, при нажатии на кнопку "Месячный отчёт":

Now = DateTimeGMT();
MonthAgo = Now - 30 * 86400;
skom
 
Сообщения: 173
Зарегистрирован: Вт окт 02, 2007 5:25 pm

Сообщение ValFLash » Ср сен 23, 2009 11:34 pm

skom писал(а):Для этого есть функция DateTimeGMT().
86400 = кол-во секунд в сутках.
Например, при нажатии на кнопку "Месячный отчёт":

Now = DateTimeGMT();
MonthAgo = Now - 30 * 86400;

хмм.... имеется ввиду суточный, недельный, месячный отчет - это когда за произвольный месяц, сутки и неделю. Начиная с произвольной даты. Если бы тупо только за последний месяц - это конечно можно и так сделать, а вот когда тебе произвольно задают старт графика - тут мне кажется без функции никак отдельно написанной. Может я конечно не понимаю чего ;) сам я в этой среде пишу только 2 месяца как не больше, а до этого вообще имел очень смутное представление что есть такие куцие среды программирования :)
Если бы было что-то в интаче типа TimeFromString стандартное и возвращало бы число, было бы проще. Была бы экономия в несколько строчек кода. :)
ValFLash
 
Сообщения: 5
Зарегистрирован: Чт сен 17, 2009 3:40 am


Вернуться в Другое

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

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