Давайте сразу определимся. В 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()
Оставить комментарий
Вы должны быть авторизованы для комментирования.