Материал статьи взят здесь: 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 |
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!
Привет.
Дополним сайт шпаргалкой по времени. Как прибавить(или отнять) пять секунд к текущему времени.
Например надо узнать прошло ли пять секунд?
Привет, математика со временем возможна после представления времени в секундах:
Подскажите как получить текущие дату/время сервера в формате "20201023_2345"
local dt = {}
dt.day, dt.month, dt.year = string.match(getInfoParam("TRADEDATE"),"(%d*)%p(%d*)%p(%d*)")
dt.hour, dt.min, dt.sec = string.match(getInfoParam("SERVERTIME"), "(%d%d)%p(%d%d)%p(%d%d)")
message(os.date("%Y%m%d_ %H%M", os.time(dt)))
Как сделать как было выяснил:
message(os.date("%x".." ".."%X"))
Но почему изменилось непонятно.
Столько лет запускал сложный код:
Lua 5.3 os.date - Когда вызвана без аргументов, date возвращает разумное представление даты и времени, зависящее от хостовой системы и текущей локали (т.е. os.date() эквивалентно os.date("%c")).
Так пойдет?
message(os.date("%x %X", os.time()))
Спасибо, kalikazandr, ваш вариант дает точно то же, что и мой корявый message(os.date("%x".." ".."%X")), мне подходит.
Но зачем в вашем варианте ", os.time()" ?
В таком исполнении message(os.date("%x %X")) получается тоже самое, что и message(os.date("%x %X", os.time())).
"Когда вызвана без аргументов, date возвращает разумное представление даты и времени, зависящее от хостовой системы и текущей локали (т.е. os.date() эквивалентно os.date("%c"))"
Два одновремено работающих на одном компьютере квика, 6 и 8 версии, дают разные результаты и в варианте os.date("%c") и в варианте os.date().
А нет варианта программно определить в какой версии LUA запущен скрипт?
message( getInfoParam ("VERSION"), 2)
Сейчас заметил, что os.date() выдает время на час больше реального.
Потестил оставшимся с октября кодом:
И все в один голос говорят, что дневная сессия давно закончена.
Стоит Win7, часовой пояс Москва, автоматический переход на летнее время и обратно отключен.
В 18-20 os.date() показывала 19-20
Проблема ушла после установки обновления KB2779562 и перезагрузки.
datetime = os.date("*t",os.time())
message(os.date("%c", os.time(datetime)))