Подскажите как правильно складывать вычитать и сравнивать время ?

Страницы: 1
RSS
Подскажите как правильно складывать вычитать и сравнивать время ?
 
Добрый вечер

Есть 2 переменные типа время

Как правильно рассчитать на сколько минут и часов они различаются?
 
Здравствуйте,
Самый правильный вариант это перевести время в секунды
 
Предположим, что имеются две таблицы, dt1 и dt2, содержащие моменты времени (поля year, month, day, hour, min, sec). Сначала с помощью функции os.time вычислим, сколько секунд прошло с начала эпохи до этих моментов времени:
Код
local t1 = os.time(dt1)
local t2 = os.time(dt2)

Затем определим, сколько секунд прошло между этими моментами времени с помощью функции os.difftime:
Код
local duration = os.difftime(t2, t1) -- под Windows можно просто отнять от t2 значение t1

Теперь находим, сколько прошло часов, минут и секунд между t1 и t2. При этом значение переменной duration будет изменяться.
Код
local seconds = duration % 60
duration = (duration - seconds) / 60
local minutes = duration % 60
duration = (duration - seconds) / 60
local hours = duration
 
Господа подскажите пож по расчету разницы во времени!
Не могу сам допереть

Есть текущее время компа - getInfoParam("SERVERTIME")

Есть время постановки заявки - order_table.datetime

Как понять сколько времени прошло между событиями?? Как правильно вычесть из одного другое или просто сравнить?
 
max max,

Чтобы сравнить время нужно для начала привести его к одному формату.
К сожалению исторически так сложилось что getInfoParam("SERVERTIME") возвращает строку формата "HH:MM:SS"
а order_table.datetime вернет таблицу с полями {year, month, day, week_day, hour, min, sec, ms, mcs}

Соответственно, через string.match переводите SERVERTIME в часы минуты и секунды
Код
HHMMSS=getInfoParam("SERVERTIME") 
   if string.len(HHMMSS)==7 then
      h,m,s = string.match(HHMMSS,"(%d)%p(%d%d)%p(%d%d)")
   else
      h,m,s = string.match(HHMMSS,"(%d%d)%p(%d%d)%p(%d%d)")
   end

Потом переводите в количество секунд

Код
SrvTime=h*60*60+m*60+s
OrdTime=order_table.datetime.hour*60*60+order_table.datetime.min*60+order_table.datetime.sec

И далее уже можно сравнивать/вычитать и т.д
 
Спасибо!

ВОПРОС

order_table.datetime как и  getInfoParam("SERVERTIME")  берется с сервера брокера?

Есть возможность получить тек время сервера как то по другому ? не через getInfoParam("SERVERTIME")  
 
Цитата
max max написал:
order_table.datetime как и  getInfoParam("SERVERTIME")  берется с сервера брокера?
Время сервера это время сервера. А время на заявке проставляет биржа, а не сервер.

Цитата
max max написал:
Есть возможность получить тек время сервера как то по другому ? не через getInfoParam("SERVERTIME")
А чем getInfoParam не устраивает?
 
Неужели проще нельзя ?))
 
Цитата
Sergey Gorokhov написал:
Цитата
max max   написал:
order_table.datetime как и  getInfoParam("SERVERTIME")  берется с сервера брокера?
Время сервера это время сервера. А время на заявке проставляет биржа, а не сервер.
Цитата
max max   написал:
Есть возможность получить тек время сервера как то по другому ? не через getInfoParam("SERVERTIME")
А чем getInfoParam не устраивает?
Тогда получается 2 разных времени .  БИРЖА И БРОКЕР
Если у них есть расхождение по времени то будут ошибки!
 
А как брать текущее время с БИРЖИ ?
 
Цитата
max max написал:
Неужели проще нельзя ?))
Вопрос не понятен.
Цитата
max max написал:
Тогда получается 2 разных времени .  БИРЖА И БРОКЕР
Если у них есть расхождение по времени то будут ошибки!

Даже более того, один сервер может работать одновременно с несколькими разными биржами и на каждой время легко может отличаться.
С трудом можно представить чтобы например биржи в Лондоне, Америке и России договорились о том чтобы их часы шли синхронно вплоть до тысячных секунды.
 
Цитата
max max написал:
А как брать текущее время с БИРЖИ ?
В чистом виде через QUIK никак, только если смотреть последнее время изменение параметра в таблице текущих торгов, или время последней сделки в таблице обезличенных сделок.
Страницы: 1
Читают тему
Наверх