Арифметические операции со временем

Страницы: 1
RSS
Арифметические операции со временем
 
Я совершаю в Луа арифметические операции со временем. Например 124500+5=124505 (12:45:05).
По какой формуле я могу избежать проблемы с 60 минутами/секундами?
124459+5=124504 (не 124464)
Как этого добиться?
 
Добрый день.
Уточните, Вы всегда хотите прибавлять/отнимать секунды?
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Когда-то для своих нужд писал функцию прибавления минут (не помню почему, но нужно было прибавлять именно только минуты), можно переработать и сделать универсальной для сложения/вычитания двух временнЫх значений:
Код
--функция прибaвляет минуты к времени time.
--time передается в формате {hour, min, sec}
function addTime(time, min)
  local _time = copy(time)
  if min >= 60 then
    local hour = math.floor(min/60)
    _time.hour = _time.hour + hour
    min = min - hour*60
  end
  _time.min = _time.min + min
  if _time.min >= 60 then
    _time.hour = _time.hour + 1
    _time.min = _time.min - 60
  end
  if _time.hour >= 24 then
    _time.hour = _time.hour - 24
  end
  return _time
end
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Цитата
Nikolay Pavlov написал:
Добрый день.
Уточните, Вы всегда хотите прибавлять/отнимать секунды?
Все мои арифметические операции с секундами. Это главная потребность. Минуты и часы не нужны
 
Все что вам нужно уже есть в луа. Используйте os.time, чтобы преобразовать таблицу времени в число секунд, прибавляй п-ов читайте секунды и преобразуйте назад через os.date.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
http://www.bot4sale.ru/blog-menu/qlua/368-lua-time.html
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Let_it_go написал:
Все мои арифметические операции с секундами. Это главная потребность. Минуты и часы не нужны
Добрый день.
Если все операции с секундами, то, действительно, как уже сказал выше s_mike, все вычисления можно делать стандартными функциями. Вот небольшой пример:
Код
my_time = {year=1970, month=1, day=1, hour=12, min=45, sec=59}

n_time = os.time(my_time)
t_time = os.date("*t", n_time+62)

message(tostring(t_time.hour).. ':' .. tostring(t_time.min) .. ':' .. tostring(t_time.sec))
>> 12:47:1

https://www.lua.org/pil/22.1.html
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Ответы не понятны. При чём здесь 1970 год?
Я вытягиваю из текущей таблицы время последнего изменения через tonumber(getParamEx("SPBFUT",tech_instr,"CHANGETIME").param_value)
оно имеет вид 101200
Добавлять секунды мне нужно к этому числу.
 
"101200" преобразуйте в секунды примерно так 10*3600+12*60+00. Секунды как есть, минуты умножайте на 60, часы на 3600 (3600 секунд в 1 часе). Получаем 36720 секунд.
Потом прибавляйте сколько нужно. К примеру +45 сек. И затем обратные действия.
36720+45 = 36765.
36765 делим на 60. Остаток от деления = 45- это секунды
36765 - 45 = 36720 (остались минуты и часы)
36720 делим на 3600, остаток от деления = 720. Делим на 60, получаем 12 - это минуты
36720 - 720 = 36000 (остались только часы)
36000 / 3600 = 10 - часы.
В итоге 101245...
как то так
 
Алексей Ч,
спасибо.
я нашёл функцию, которая это делают
Код
function time_to_number(t)    return (math.floor(t / 10000) * 60 * 60) + ((math.floor(t / 100) % 100) * 60) + (t % 100)
    -- you can also use % 10000 if the hours are limited to two digits
end
А если надо подобное число конвертировать обратно, то есть другая функция.
Код
function time_split(t)    
    local hour = math.floor(t / 3600)
    local min = math.floor((t % 3600) / 60)
    local sec = (t % 3600) % 60
    return hour, min, sec  
end
Страницы: 1
Читают тему
Наверх