Как вычитать даты между собой

Страницы: 1
RSS
Как вычитать даты между собой, Работа с датой на QPILE
 
Здравствуйте, как можно из текущей даты

SERVER_TIME=GET_INFO_PARAM("SERVERTIME")

Вычесть 20 минут например

???
 
Правильный способ (весьма геморройный)
1) перевести дату-время в "тики". Для этого нужно выбрать размер тика (в никсах секунда, в дотнете 100 наносекунд) и точку отсчета (в никсах 1 января 1970, в дотнете 1 января 1601), можете что-то свое придумать, не суть важно.
2) вычесть из этого числа нужный период, также переведенный в тики.
3) перевести полученные тики обратно в дату-время.
Как именно все это чудо считается, можно в том же дотнете подглядеть, благо сорцы есть
 
http://www.bot4sale.ru/blog-menu/qlua/368-lua-time.html
 
Здравствуйте, благодарю за консультацию. Как понимаю на чистом QPILE это не сделать ?

Как работать в дотнете и перевести все это в скрипт на QPILE я еще не знаю

Наверное буду рассматривать вариант писать скрипты на LUA
 
Цитата
Евгений написал:
Как понимаю на чистом QPILE это не сделать ?
Можно сделать вышеупомянутым геморным способом, а стандартных функций для даты-времени что-то я там не припомню.
Цитата
Наверное буду рассматривать вариант писать скрипты на LUA
И это правильно.
 
' ******** ФУНКЦИЯ ВЫЧИТАНИЯ ВРЕМЕНИ ********
FUNC DIFFTIME(Min)
SERVER_DATE=GET_INFO_PARAM("TRADEDATE") ' дата сервера
SERVER_TIME=GET_INFO_PARAM("SERVERTIME") ' время сервера

TimeHourMinute = 0+SUBSTR(SERVER_TIME,0,2)*60
TimeMinute = 0+SUBSTR(SERVER_TIME,3,2)
TimeSec = 0+SUBSTR(SERVER_TIME,6,7)

SumMinute = TimeHourMinute + TimeMinute - Min

CorrHour = 0+FLOOR(SumMinute/60)
CorrMinute =0+ SumMinute - CorrHour*60
CorrTime = 0+ (CorrHour & CorrMinute & TimeSec)
'MESSAGE(CorrTime,2)
result = CorrTime
return
END FUNC
 
Нормально, размер тика выбран равным одной секунде, точка отсчета - начало текущих суток, дата не учитывается (зачем тогда SERVER_DATE=GET_INFO_PARAM("TRADEDATE")), поэтому если, например, из 9:00 вычесть 600 минут, залезем во вчера, а в остальном все по науке.
 
Ок понял, контроль времени уже в теле программы поставлю наподобие такого

IF TIME > 135959 AND TIME < 140301
Result ="CLEARING"   ' дневной клиринг
return
ELSE
Result = "OK"
END IF

IF TIME > 184459 AND TIME < 190001
Result ="CLEARING" ' вечерний клиринг
return
ELSE
Result = "OK"
END IF


// так буду доставать информацию из старых свечей

' ******** Функция получения графика из прошлого ********
FUNC GRAFDIFFMIN (EMA,MIN)
SERVER_DATE=GET_INFO_PARAM("TRADEDATE") ' дата сервера
COR_SERVER_TIME=DIFFTIME(MIN) ' время сервера

DateCandle = 0+ (SUBSTR(SERVER_DATE,6,4)&SUBSTR(SERVER_DATE,3,2)&SUBSTR(SERVER_DATE,0,2)) ' Формируем дату свечи
TimeHour = 0+SUBSTR(COR_SERVER_TIME,0,2)
TimeMin = 0+SUBSTR(COR_SERVER_TIME,3,2)
TimeSec = 0+SUBSTR(COR_SERVER_TIME,6,7)
TimeCandle =0+ (TimeHour & TimeMin & TimeSec) ' Формируем текущее время

slice = GET_CANDLE_EX (EMA, DateCandle, TimeCandle) ' Получаем данные индикатора в массиве
LineCount = 0 + GET_VALUE (slice,"COUNT") ' Определяем количество линий в индикаторе
TIME_Candle = GET_VALUE (slice,"TIME") ' Получаем время текущей свечи
lines = GET_VALUE (slice,"LINES") ' Получаем коллекцию линий
GRAFICs=CREATE_COLLECTION() ' Создаем коллекцию

' Перебираем последовательно все линии индикатора
FOR lineID FROM 0 TO LineCount-1
line = GET_COLLECTION_ITEM (lines, lineID) ' Получаем массив каждой линии
GRAFICs = INSERT_COLLECTION_ITEM(GRAFICs, lineID, (0 + Get_Value (line,"CLOSE"))) ' Записываем значение в коллекцию
END FOR

GRAFICs = INSERT_COLLECTION_ITEM(GRAFICs, 0, TIME_Candle) ' Записываем в коллекцию время свечи
result = GRAFICs
return
END FUNC
 
Цитата
Евгений написал:
так буду доставать информацию из старых свечей
Дальнейшее ниасилил, прошу прощения, последний раз что-то QPILE писал лет 15 назад. Может все же на луа посмотреть, это ж адок какой-то. И да, тут можно код форматировать, угловые скобочки с многоточием в тулбаре.

Лирика.
Скрытый текст
 
Ок )) благодарю за совет, буду смотреть в сторону Lua
Страницы: 1
Читают тему (гостей: 1)
Наверх