Работа со временем (os)

Стандартные функции Lua для работы с датой и временем. Позволяют получать текущее время, форматировать даты и выполнять вычисления с временными интервалами.

Подключение

Функции доступны в глобальной таблице os без необходимости подключения:

os.time()
os.date()
os.clock()
os.difftime()

Получение времени

Функция os.time() возвращает количество секунд с 1 января 1970 года (Unix timestamp):

-- Текущее время
local now = os.time()  -- 1718462445

-- Конкретная дата
local t = os.time({
    year = 2024,
    month = 12,
    day = 25,
    hour = 10,
    min = 30,
    sec = 0
})

Сигнатура: os.time([spec]) -> integer

Параметры таблицы:

Поле Тип Значение по умолчанию Описание
year integer текущий год Год (четыре цифры)
month integer текущий месяц Месяц (1–12)
day integer текущий день День месяца (1–31)
hour integer 0 Час (0–23)
min integer 0 Минуты (0–59)
sec integer 0 Секунды (0–59)

Без аргументов функция возвращает текущее время. При передаче таблицы недостающие поля заполняются значениями по умолчанию.

-- Только дата (время — полночь)
os.time({year = 2024, month = 6, day = 15})

-- Первое число текущего месяца
os.time({day = 1})

Форматирование даты

Функция os.date() преобразует время в строку или таблицу:

local now = os.time()

-- Стандартный формат os.date() -- "Sat Jun 15 14:30:45 2024"

-- Произвольный формат os.date("%Y-%m-%d", now) -- "2024-06-15" os.date("%H:%M:%S", now) -- "14:30:45" os.date("%Y-%m-%dT%H:%M:%S", now) -- "2024-06-15T14:30:45"

-- Время по UTC (восклицательный знак перед форматом) os.date("!%Y-%m-%d %H:%M:%S", now)

-- Получение таблицы local t = os.date("*t", now)

Сигнатура: os.date([format], [timestamp]) -> string | table

Параметр Тип Значение по умолчанию Описание
format string "%c" Строка формата или "*t" для таблицы
timestamp integer текущее время Время для форматирования

Коды формата

Код Результат Пример
%Y Год (4 цифры) 2024
%y Год (2 цифры) 24
%m Месяц (01–12) 06
%d День (01–31) 15
%H Час, 24-часовой (00–23) 14
%I Час, 12-часовой (01–12) 02
%M Минуты (00–59) 30
%S Секунды (00–59) 45
%p AM/PM PM
%A День недели Saturday
%a День недели (сокр.) Sat
%B Месяц June
%b Месяц (сокр.) Jun
%w День недели (0–6, вс=0) 6
%j День года (001–366) 167
%U Номер недели (00–53) 24
%z Часовой пояс -0700
%Z Название часового пояса PDT
%c Дата и время Sat Jun 15 14:30:45 2024
%x Дата 06/15/24
%X Время 14:30:45
%% Символ % %

Таблица даты

При формате "*t" возвращается таблица:

local t = os.date("*t")
Поле Тип Описание Пример
year integer Год 2024
month integer Месяц (1–12) 6
day integer День (1–31) 15
hour integer Час (0–23) 14
min integer Минуты (0–59) 30
sec integer Секунды (0–59) 45
wday integer День недели (1–7, вс=1) 7
yday integer День года (1–366) 167
isdst boolean Летнее время false

Для получения таблицы по UTC используйте "!*t".

Измерение времени выполнения

Функция os.clock() возвращает процессорное время с момента запуска:

local start = os.clock()

-- Какая-то работа
for i = 1, 1000000 do end

local elapsed = os.clock() - start
print(string.format("Выполнено за %.3f сек.", elapsed))

Сигнатура: os.clock() -> number

Разница между датами

Функция os.difftime() вычисляет разницу между двумя моментами времени:

local t1 = os.time({year = 2024, month = 1, day = 1})
local t2 = os.time({year = 2024, month = 12, day = 31})

local diff = os.difftime(t2, t1)  -- t2 - t1
local days = diff / 86400
print(days)  -- 365

Сигнатура: os.difftime(t2, t1) -> number

Параметр Тип Описание
t2 integer Конечное время
t1 integer Начальное время

Возвращает разницу t2 - t1 в секундах. Результат может быть отрицательным.

Идентификатор платформы

Константа, определяющая среду выполнения:

os.platform  -- "wippy"