Преобразование времени в число

Страницы: 1
RSS
Преобразование времени в число
 
Здравствуйте, решил переходить с qpile на qlua и сразу же возникла следующая проблема:
на qpile я беру время сервера таким образом
Код
SERVERTIME = GET_INFO_PARAM("SERVERTIME")
Время получается в формате чч:мм:сс, например 14:36:48, затем я преобразую это время в число
Код
time = SUBSTR(SERVERTIME,0,2) & SUBSTR(SERVERTIME,3,2) & SUBSTR(SERVERTIME,6,2)
Получается time = 143648, далее при использовании этой переменной я добавляю "+0", например
Код
time+0 > 130000
Вопрос, как мне в qlua привести время к такому же формату?
Время с сервера я беру таким образом
Код
servertime = getInfoParam("SERVERTIME")
А дальше засада, не пойму как перевести к числовому виду и как преобразовать потом полученное значение в число.
 
Работа с временем в Lua  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Спасибо за ссылку на статью, но в ней ничего нужного не нашел. Если кому интересно решил проблему следующим образом:
Код
servertime = getInfoParam("SERVERTIME")      -- Текущее время с сервера в формате ЧЧ:ММ:СС
servertime = string.sub(servertime, 1, 2)..string.sub(servertime, 4, 5)..string.sub(servertime, 7, 8)   -- Перевод времени в числовой формат
servertime = tonumber(servertime)   -- Преобразование в число
 

Время сервера передается без начального нуля, поэтому предложенный код до 10 часов утра не работает. Вот немного доработанный вариант:

Код
-- Время сервера в числовой формат.
    local sT = getInfoParam("SERVERTIME") -- Время сервера в формате Ч:ММ:СС или ЧЧ:ММ:СС
    function DToN (s,i,j)
      return tonumber(string.sub(s, i, j)) -- Перевод цифр в числа.
    end
    srvTime = DToN(sT,-2,-1) + DToN(sT,-5,-4)*60 + DToN(sT,-8,-7)*3600 -- Количество секунд с начала суток.

Всё пройдет. Но это не точно.
 
Добрый день,
есть рабочий код для вывода метки на график, но он работает только с 10 утра,
если запускается до 10 утра то выдает ошибку в пункте 2 -  attempt to concatenate a nil value (local 'm')

1.  local h,m,t = string.match(getInfoParam("SERVERTIME"),"(%d%d)%p(%d%d)%p(%d%d)")
2.  local time_pos = h..m..t

Не подскажете как поправить вывод, если это реально?
Спасибо.
 
Цитата
Денис написал:
getInfoParam("SERVERTIME")
local x=getInfoParam("SERVERTIME");
local time_pos =string.sub (x,1,2)..string.sub (x,4,5)..string.sub (x,7,8);
 
Денис, добрый день.
Вот рабочий код:

Код
  local t = string.gsub(getInfoParam("SERVERTIME"),"%:", "")
  local time_pos = string.format("%06d", tonumber(t))


nikolz, до 10 утра время сервера передается без начального нуля, одной цифрой.
Всё пройдет. Но это не точно.
 
Цитата
Ziveleos написал:
Денис, добрый день.
Вот рабочий код:

Код
     local  t  =   string.gsub ( getInfoParam ( "SERVERTIME" ),"%:",  "" )
   local  time_pos  =   string.format ( "%06d" , tonumber(t))

  

nikolz, до 10 утра время сервера передается без начального нуля,  одной  цифрой.
Цитата
Ziveleos написал:
local time_pos =string.sub (x,1,2)..string.sub (x,4,5)..string.sub (x,7,8);
пардон, исправил:
Код
local time_pos=string.gsub(getInfoParam("SERVERTIME"), ":", "");
 
Цитата
nikolz написал:
 
Цитата
Ziveleos написал:
local time_pos =string.sub (x,1,2)..string.sub (x,4,5)..string.sub (x,7,8);
Вы утверждаете, что это я написал?
Всё пройдет. Но это не точно.
 
Цитата
nikolz написал:
пардон, исправил:
Код
   local  time_pos =  string.gsub ( getInfoParam ( "SERVERTIME" ),  ":" ,  "" );
  

Из руководства:

Цитата
%x:  (где x - не алфавитно-цифровой символ) представляет символ x. Это стандартный способ кодирования магических символов. Любой не алфавитно-цифровой символ (включая все знаки пунктуации, даже не магические) могут предваряться '%', когда используются для представления себя в шаблоне.
Всё пройдет. Но это не точно.
 
Цитата
nikolz написал:
Цитата
Денис написал:
getInfoParam("SERVERTIME")
local x=getInfoParam("SERVERTIME");
local time_pos =string.sub (x,1,2)..string.sub (x,4,5)..string.sub (x,7,8);
Попробовал этот вариант сейчас, метки выводит, но на баре 23:49 прошлого торгового дня.
 
Цитата
Ziveleos написал:
Денис, добрый день.
Вот рабочий код:

Код
     local  t  =   string.gsub ( getInfoParam ( "SERVERTIME" ),"%:",  "" )
   local  time_pos  =   string.format ( "%06d" , tonumber(t))

  

nikolz, до 10 утра время сервера передается без начального нуля,  одной  цифрой.
Попробовал этот вариант тоже, метки выводит на текущем баре как и нужно.

Спасибо всем за помощь.
 
Всем привет!

Я если мне нужно работать с временем, то перевожу время из таблицы во временную метку.

Примерно так:

local time_current_svechi = dat a:T(i)
metka = time_current_svechi['year']*100000000 + time_current_svechi['month'] * 1000000 + time_current_svechi['day'] * 10000 + time_current_svechi['hour'] * 100 + time_current_svechi['min'];

Получаю число типа такого: 202305122200 - где первые четыре числа - год, потом два - месяц, потом 2 - день, следующие два - час, а последние два - минуты.

Немного излагал это в видео на своем канале: https://dzen.ru/video/watch/64e61fc12a49b25ab7524f57
И в статье: https://dzen.ru/a/ZOYFAU0513xVKQJ_
 
так лучше :
local t = dat a:T(i)
metka = t['min']+100*( t['hour']  +100*(  t['day'] +100*( t['month'] +100*t['year']*)))
 
вместо 4 констант надо одну.
Но лучше не соединять дату и время  так как при 32 бит будет неточно.
Кроме того, дата не меняется в течении торгового дня.  
 
я делаю так
так лучше :
local t = dat a:T(i)
YYMMDD =  t.day +100*( t.month +100*t.year)
HHMMSS =t.sec +100*( t.min  +100* t.day)
Страницы: 1
Читают тему
Наверх