Работа со временем (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() преобразует время в строку или таблицу:
-- Стандартный формат 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"