Функции даты и времени (Lua) - Торговые роботы и индикаторы под QUIK
0 оценок, среднее: 0,00 из 50 оценок, среднее: 0,00 из 50 оценок, среднее: 0,00 из 50 оценок, среднее: 0,00 из 50 оценок, среднее: 0,00 из 5 (0 голосов, среднее: 0,00 из 5)
Вы должны быть зарегистрированы для голосования по данному сообщению.
Загрузка...

Функции даты и времени (Lua)

Давайте сразу определимся. В Lua нет понятия «Календарная дата». Есть понятие «время», которое включает в себя как цифру в календаре, так и показания стрелок будильника. Поэтому в дальнейшем будем оперировать термином «время», подразумевая, что оно включает в себя и день/месяц/год и все остальное.

Для хранения времени в Lua 5.1 используются 2 типа данных.

Первый – это таблица с полями

Давайте в дальнейшем такую таблицу именовать как таблицу datetime. Эта таблица может использоваться как в качестве параметра для функций даты/времени языка lua, так и в качестве возвращаемого результата. В зависимости от контекста не все поля требуют заполнения.

Второй формат хранения даты и времени – это так называемый Posix формат времени (или Unix-время).

Представление времени в виде количества секунд удобно использовать для сравнения и хранения дат (дата и время в этом формате занимают всего 4 или 8 байтов). При необходимости обращения к элементам дат (день, месяц, год) секунды можно преобразовать в любой подходящий формат (и наоборот), но если такие преобразования выполняются часто, они снижают производительность.

Я отдельно подчеркну удобство posix формата времени. Мы можем легко прибавлять, вычитать, сравнивать и находить разницу между двумя временными моментами путем простейших арифметических операций.

Теперь о функциях работы со временем, которые нам предоставляет Lua 5.1. Собственно, основных две:

  • os.time ([table]) – преобразует таблицу datetime в posix
  • os.date ([format [, time]]) – преобразует posix в таблицу datetime.

Как видно, они комплементарные. Однако на самом деле все намного интереснее. Давайте остановимся на каждой из них подробнее. В примерах ниже я буду использовать функцию print(). Если у Вас не установлен пакет Lua 5.1, а только терминал QUIK, замените print() на message()

Преобразование таблицы DATETIME в POSIX:
Преобразование POSIX в таблицу DATETIME:
Получение текущего времени в формате POSIX:
Получение текущего времени в формате DATETIME:
Варианты работы функции OS.DATE():
Преобразование строки даты в DATETIME:
Преобразование строки времени в DATETIME:

Читайте также:

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