os.time и os.date
Получайте текущее время.
«os.time и os.date» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Зачем нужно время
Программам часто нужно знать текущее время. Игра записывает момент, когда вы набрали очки, файл журнала отмечает время каждого события, а приложение-напоминание ведёт обратный отсчёт до крайнего срока.
Lua хранит инструменты для работы со временем во встроенной библиотеке os. Два главных инструмента — os.time и os.date. В этом уроке вы познакомитесь с обоими.
os.time возвращает число
os.time() без аргументов возвращает текущий момент в виде одного числа.
Это число показывает количество секунд, прошедших с фиксированного момента в прошлом — эпохи. Это всего лишь целое число, поэтому его можно сохранять, сравнивать и использовать в вычислениях.
local now = os.time()
print(now)
print(type(now))Эпоха
В большинстве систем эпоха — это полночь 1 января 1970 года по времени UTC. Поэтому os.time() сообщает, сколько секунд прошло с этого момента.
Большое число вроде 1700000000 — это нормально. Оно увеличивается на единицу каждую секунду, поэтому отлично подходит для сравнения двух моментов.
local seconds = os.time()
print("Seconds since 1970:", seconds)os.date возвращает текст
Сырое количество секунд трудно читать. os.date() преобразует время в понятный человеку текст.
При вызове без аргументов она возвращает читаемую строку с описанием текущих даты и времени, используя локальные настройки вашей системы.
print(os.date())os.date с форматом
Обычно os.date передают строку формата. Специальные коды, начинающиеся с %, заменяются частями даты.
%Y — это год из 4 цифр, %m — месяц, а %d — день. Остальной текст остаётся без изменений.
print(os.date("Year: %Y"))
print(os.date("%Y-%m-%d"))Объединение времени и даты
os.date может принимать второй аргумент — число, обозначающее время. Передайте ей результат os.time, и она отформатирует именно этот момент.
Без второго аргумента используется текущее время, поэтому эти два вызова описывают один и тот же момент.
local t = os.time()
print(os.date("%Y-%m-%d", t))Местное время и UTC
По умолчанию os.date использует ваш местный часовой пояс. Чтобы вместо этого получить время UTC, начните строку формата с восклицательного знака !.
Это важно для серверов и приложений, которыми пользуются по всему миру: всем участникам нужны единые часы.
print("Local:", os.date("%H:%M"))
print("UTC: ", os.date("!%H:%M"))Табличный вид
Если передать "*t" в качестве формата, os.date вернёт таблицу, а не строку.
В таблице есть именованные поля, такие как year, month, day, hour, min и sec. Это удобно, когда вам нужно получить только одну часть.
local d = os.date("*t")
print(d.year, d.month, d.day)
print(d.hour, d.min, d.sec)Чтение одного поля
Поскольку табличный вид предоставляет именованные поля, получить только текущий месяц или только текущий час очень легко.
Используйте !*t для табличного представления времени UTC. Каждое поле содержит обычное число, которое можно использовать в условиях.
local d = os.date("*t")
if d.hour < 12 then
print("Good morning")
else
print("Good afternoon")
endos.time из таблицы
os.time также работает в обратную сторону. Передайте ей таблицу с полями year, month и day, и она вернёт количество секунд для этой даты.
Так можно создать значение времени для любой выбранной конкретной календарной даты.
local t = os.time({year=2020, month=1, day=1, hour=0})
print(t)
print(os.date("%Y-%m-%d", t))Обратное преобразование
Вы можете свободно переходить между двумя представлениями: os.time преобразует таблицу в число, а os.date("*t", n) — число обратно в таблицу.
Такое обратное преобразование служит основой для вычислений с датами, которые вы изучите в следующих уроках.
local n = os.time({year=2021, month=6, day=15})
local back = os.date("*t", n)
print(back.year, back.month, back.day)Быстрая проверка
Проверьте, насколько хорошо вы поняли две основные функции.
Повторение
os.time() возвращает текущий момент как количество секунд с эпохи. os.date() преобразует время в текст с помощью кодов формата % или в таблицу с помощью "*t".
Добавьте ! для времени UTC и передайте число времени вторым аргументом, чтобы отформатировать конкретный момент. Вместе эти возможности покрывают почти все задачи работы с датами в Lua.
Часто задаваемые вопросы
Урок «os.time и os.date» бесплатный?
Да — полный текст урока «os.time и os.date» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «os.time и os.date»?
Получайте текущее время. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «os.time и os.date»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- os.time и os.date
- Форматирование дат
- Арифметика времени
- Измерение длительности