Дата/время в QLua(Lua)

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 3, среднее: 5,00 из 5)
Загрузка...

Qlua-основы
Материал статьи взят здесь: http://www.bot4sale.ru/blog-menu/qlua/spisok-statej/368-lua-time.html

Дата/время в QLua(Lua) может быть представлено либо в виде секунд, прошедших с полуночи 1 января 1970 года, либо в виде таблицы, имеющей следующие поля:

   year - год (четыре цифры)
   month - месяц (1 – 12)
   day - день (1 – 31)
   hour - час (0 – 23)
   min - минуты (0 – 59)
   sec - секунды (0 – 59)
   wday - день недели (1 - 7), воскресенью соответствует 1
   yday - день года
   isdst - флаг дневного времени суток, тип boolean

Встроенные функции:

   os.clock() - возвращает время в секундах с точностью до миллисекунд с момента запуска приложения, в нашем случае QUIK. Пример: 1544.801
   os.time() - возвращает время в секундах, прошедших с полуночи 1 января 1970 года, может принимать вышеописанную таблицу, в качестве аргумента, без аргументов возвращает текущее время
   os.date() - возвращает форматированные дату/время, первым аргументом принимает формат, вторым аргументом принимает время в секундах. Аргументы не обязательны. Если не передать 2-й аргумент, функция вернет текущие дату/время компьютера. Если функцию вызвать вообще без аргументов, то она вернет текущие дату/время компьютера в виде 03/22/15 22:28:11

В строке формата можно использовать следующие опции:

%a   - день недели, сокр. (англ.) (пример, Wed)
%A   - день недели, полностью (англ.) (пример, Wednesday)
%b   - месяц, сокр. (англ.) (пример, Sep)
%B   - месяц, полностью (англ.) (пример, September)
%c   - дата и время (по-умолчанию) (пример, 03/22/15 22:28:11)
%d   - день месяца (пример, 22) [диапазон, 01-31]
%H   - час, в 24-х часовом формате (пример, 23) [диапазон, 00-23]
%I   - час, в 12-и часовом формате (пример, 11) [диапазон, 01-12]
%M   - минута (пример, 48) [диапазон, 00-59]
%m   - месяц (пример, 09) [диапазон, 01-12]
%p   - время суток "am", или "pm"
%S   - секунда (пример, 10) [диапазон, 00-59]
%w   - день недели (пример, 3) [диапазон, 0-6, соответствует Sunday-Saturday]
%x   - дата (пример, 09/16/98)
%X   - время (пример, 23:48:10)
%Y   - год, 4 цифры (пример, 2015)
%y   - год, 2 цифры (пример, 15) [00-99]
%%   - символ "%"
*t   - вернет таблицу
!*t  - вернет таблицу (по Гринвичу)

Примеры:

-- Представить произвольное время в секундах
datetime = { year  = 2015,
             month = 03,
             day   = 22,
             hour  = 22,
             min   = 28,
             sec   = 11
           };
seconds = os.time(datetime); -- в seconds будет значение 1427052491
 
-- Представить время в секундах в виде таблицы datetime
datetime = os.date("*t",seconds);
 
-- Преобразование строки даты/времени в таблицу datetime
dt = {};
dt.day,dt.month,dt.year,dt.hour,dt.min,dt.sec = string.match("22/03/2015 22:28:11","(%d*)/(%d*)/(%d*) (%d*):(%d*):(%d*)");
for key,value in pairs(dt) do dt[key] = tonumber(value) end
 
-- А так можно получить текущие дату/время сервера в виде таблицы datetime
dt = {};
dt.day,dt.month,dt.year,dt.hour,dt.min,dt.sec = string.match(getInfoParam('TRADEDATE')..' '..getInfoParam('SERVERTIME'),"(%d*).(%d*).(%d*) (%d*):(%d*):(%d*)")
for key,value in pairs(dt) do dt[key] = tonumber(value) end

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

Дата/время в QLua(Lua): 58 комментариев

  1. Здравствуйте.
    Разбираюсь с датой временем. Пример с циклом как раз то что мне нужно

    1
    2
    3
    4
    
    -- Преобразование строки даты/времени в таблицу datetime
    dt = {};
    dt.day,dt.month,dt.year,dt.hour,dt.min,dt.sec = string.match("22/03/2015 22:28:11","(%d*)/(%d*)/(%d*) (%d*):(%d*):(%d*)");
    for key,value in dt do dt[key] = tonumber(value) end

    Но он у меня не работает, выдает ошибку. "lua:26: attempt to call global 'dt' (a table value)"
    Перешел разбираться с циклом и там в примере указано pairs(Array)
    Исправил код из примера

    1
    2
    3
    4
    
    -- Преобразование строки даты/времени в таблицу datetime
    dt = {};
    dt.day,dt.month,dt.year,dt.hour,dt.min,dt.sec = string.match("22/03/2015 22:28:11","(%d*)/(%d*)/(%d*) (%d*):(%d*):(%d*)");
    for key,value in pairs(dt) do dt[key] = tonumber(value) end

    И ошибка пропала.
    Я так понял что обязательно писать pairs. или в каких то случаях допускается просто указать таблицу? Если допускается, то в каких? Или это ошибка в примере?

    Код писал в индикаторе.

      1. А к чему это: for key,value in pairs(dt) do dt[key] = tonumber(value) end ?
        С моей точки зрения - это бред. Луа без разницы строковые значения в dt или нет.
        Рекомендую вот тут ознакомится как действительно работать со временем в луа, Дмитрий, без обид))
        http://bot4sale.ru/blog-menu/qlua/spisok-statej/368-lua-time.html