Перестал работать SERVERTIME. не могу понять в чём проблема

Страницы: 1
RSS
Перестал работать SERVERTIME. не могу понять в чём проблема
 
Скрипт работал примерно 2-3 месяца назад, потом был отложен на полку.
Сейчас скрипт перестал работать, потратил примерно 6 часов, но ничего не помогло
подскажите пожалуйста если ли в коде ошибка? Образец взят от самих разработчиков
Код
isRun = true

base_time = "09:07:00" -- время в которое исполнится заявка.время операционной системы

function FixTime(V)
V=tostring(V)
local Out = os.date("!*t",os.time())
local len = string.len(V)
if len > 6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)%p(%d%d)%p(%d%d)")
elseif len == 6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)(%d%d)(%d%d)")
elseif len == 5 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d)(%d%d)(%d%d)")
end
return Out
end

function main()
while isRun do
stime = tostring(GetInfoParam("SERVERTIME"))
--stime = tostring(os.time)
message(tostring(stime))
message(tostring(base_time))
   if     os.time(FixTime(stime)) < os.time(FixTime(base_time))  then
   elseif os.time(FixTime(stime)) >= os.time(FixTime(base_time)) then
   result = 1
      if result ~= 1 then
      message(tostring("Транзакция не прошла проверку на стороне терминала QUIK"))
      else
      message(tostring("Транзакция отправлена"))
      isRun = false
      end
      sleep(100)
   end
   sleep(1500)
end
message(tostring("====="))
sleep(100)
end
 
уточню: данный скрипт на событие по времени сервера quik. скрипт зацикливается если например указать на 5-6 часов больше, если меньше 5 часов то условие срабатывает, хотя по факту время ещё не наступило
может ли это как то связано с изменение формата времени в windows. сброс формата не помог, так перевод времени и часового пояса на МСК не помогло
 
Цитата
Hired написал:
уточню: данный скрипт на событие по времени сервера quik. скрипт зацикливается если например указать на 5-6 часов больше, если меньше 5 часов то условие срабатывает, хотя по факту время ещё не наступило
может ли это как то связано с изменение формата времени в windows. сброс формата не помог, так перевод времени и часового пояса на МСК не помогло
трудно гадать без результатов.
Возможно не работают сравнения.
покажите сообщения( message)
 
Hired, можно сделать проще
Код
isRun = true

base_time = "22:16:30"
base_hour,base_min,base_sec = string.match(base_time,"(%d*):(%d*):(%d*)")
base_offset=base_hour*3600+base_min*60+base_sec

function main()
  while isRun do
    srv_hour,srv_min,srv_sec = string.match(getInfoParam('SERVERTIME'),"(%d*):(%d*):(%d*)")
    srv_offset=srv_hour*3600+srv_min*60+srv_sec
    if(srv_offset>=base_offset)then
      message("go")
      isRun = false
    else
      message("wait")
    end
      sleep(100)
   end
end
 
Цитата
BlaZed написал:
isRun = true

base_time = "22:16:30"
base_hour,base_min,base_sec = string.match(base_time,"(%d*):(%d*):(%d*)")
base_offset=base_hour*3600+base_min*60+base_sec

function main()
 while isRun do
   srv_hour,srv_min,srv_sec = string.match(getInfoParam('SERVERTIME'),"(%d*):(%d*):(%d*)")
   srv_offset=srv_hour*3600+srv_min*60+srv_sec
   if(srv_offset>=base_offset)then
     message("go")
     isRun = false
   else
     message("wait")
   end
     sleep(100)
  end
end
можно еще проще:
-------------
Код
isRun = true
base_time = 0+string.gsub("22:16:30",':','');

function main()
  while isRun do
    srv_time = 0+string.gsub(getInfoParam('SERVERTIME'),':','')
    if(srv_time>=base_time)then
      message("go")
      isRun = false
    else
      message("wait")
    end
      sleep(100)
   end
end
 
Проще можно, но когда сервер начнет возвращать данные не в ожидаемом формате, то придется уже разбирать формат.

Если же для себя пишешь, то конечно, можно упрощать. Правда надо помнить, что 9 утра сегодня - это больше чем 22:00 вчера. Если же просто время сравнивать, то будет ошибка.
Страницы: 1
Читают тему
Наверх