0Pricing
Lua Academy · Урок

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")
end

os.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 — локальная установка не требуется.

Все уроки этого курса

  1. os.time и os.date
  2. Форматирование дат
  3. Арифметика времени
  4. Измерение длительности
← Назад к Lua Academy