Работа со временем (os)
Работа со временем (os)
Заголовок раздела «Работа со временем (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
Параметры таблицы:
| Поле | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
year | number | текущий год | Год (четыре цифры) |
month | number | текущий месяц | Месяц (1–12) |
day | number | текущий день | День месяца (1–31) |
hour | number | 0 | Час (0–23) |
min | number | 0 | Минуты (0–59) |
sec | number | 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 | number | текущее время | Время для форматирования |
Коды формата
Заголовок раздела «Коды формата»| Код | Результат | Пример |
|---|---|---|
%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 | number | Год | 2024 |
month | number | Месяц (1–12) | 6 |
day | number | День (1–31) | 15 |
hour | number | Час (0–23) | 14 |
min | number | Минуты (0–59) | 30 |
sec | number | Секунды (0–59) | 45 |
wday | number | День недели (1–7, вс=1) | 7 |
yday | number | День года (1–366) | 167 |
isdst | boolean | Летнее время | false |
Для получения таблицы по UTC используйте "!*t".
Измерение времени выполнения
Заголовок раздела «Измерение времени выполнения»Функция os.clock() возвращает процессорное время с момента запуска:
local start = os.clock()
-- Какая-то работаfor i = 1, 1000000 do end
local elapsed = os.clock() - startprint(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 - t1local days = diff / 86400print(days) -- 365Сигнатура: os.difftime(t2, t1) -> number
| Параметр | Тип | Описание |
|---|---|---|
t2 | number | Конечное время |
t1 | number | Начальное время |
Возвращает разницу t2 - t1 в секундах. Результат может быть отрицательным.
Идентификатор платформы
Заголовок раздела «Идентификатор платформы»Константа, определяющая среду выполнения:
os.platform -- "wippy"