Перейти к содержимому

Работа со временем (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]) -> number

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

ПолеТипЗначение по умолчаниюОписание
yearnumberтекущий годГод (четыре цифры)
monthnumberтекущий месяцМесяц (1–12)
daynumberтекущий деньДень месяца (1–31)
hournumber0Час (0–23)
minnumber0Минуты (0–59)
secnumber0Секунды (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

ПараметрТипЗначение по умолчаниюОписание
formatstring"%c"Строка формата или "*t" для таблицы
timestampnumberтекущее времяВремя для форматирования
КодРезультатПример
%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
%pAM/PMPM
%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")
ПолеТипОписаниеПример
yearnumberГод2024
monthnumberМесяц (1–12)6
daynumberДень (1–31)15
hournumberЧас (0–23)14
minnumberМинуты (0–59)30
secnumberСекунды (0–59)45
wdaynumberДень недели (1–7, вс=1)7
ydaynumberДень года (1–366)167
isdstbooleanЛетнее время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

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

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

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

os.platform -- "wippy"