Python time: работа с системным временем и датами
Основные возможности модуля time
Модуль time в Python предоставляет функции для работы с системным временем. Он позволяет получать текущую временную метку, приостанавливать выполнение программы, преобразовывать время в структурированный формат и обратно, а также форматировать вывод. Это основной инструмент для работы со временем, не связанный с датами высокого уровня (для этого существует модуль datetime).
Основные функции:
- time.time() возвращает количество секунд с эпохи (1 января 1970 года, UTC) в виде числа с плавающей точкой.
- time.sleep(seconds) приостанавливает выполнение на указанное количество секунд.
- time.localtime([secs]) преобразует секунды в структуру struct_time в локальном часовом поясе.
- time.gmtime([secs]) то же, но в UTC.
- time.strftime(format, t) форматирует структуру времени в строку.
- time.strptime(string, format) разбирает строку в структуру времени.
Пример базового использования:
import time
# Текущая временная метка
timestamp = time.time()
print("Текущее время (сек от эпохи):", timestamp)
# Задержка на 2 секунды
print("Начало задержки")
time.sleep(2)
print("Прошло 2 секунды")
# Локальное время в структуре
local_time = time.localtime(timestamp)
print("Год:", local_time.tm_year, "Месяц:", local_time.tm_mon, "День:", local_time.tm_mday)
# Форматированный вывод
formatted = time.strftime("%d.%m.%Y %H:%M:%S", local_time)
print("Отформатированное время:", formatted)
время создания python (время создания файла/объекта в python)
Текущее время (сек от эпохи): 1682345678.123456 Начало задержки Прошло 2 секунды Год: 2023 Месяц: 4 День: 24 Отформатированное время: 24.04.2023 15:27:58
время сообщения python (время сообщения (метка времени) в python)
Это основной подход для большинства задач, где требуется работа с абсолютным временем, задержками или простым форматированием.
Как измерить время выполнения участка кода?
Для измерения производительности часто используют time.time() или более точный time.perf_counter(). Первый подходит для длительных операций (секунды), второй обеспечивает высокое разрешение.
import time
start = time.perf_counter()
# Имитируем работу
time.sleep(1.5)
end = time.perf_counter()
print(f"Время выполнения: {end - start:.6f} сек")
дата и время в python (работа с датой и временем в python)
Время выполнения: 1.500123 сек
модуль время python (модуль time в python)
Проблема: Использование time.time() может давать неточные результаты из-за корректировок системного времени (например, при синхронизации NTP). Решение: Применять time.perf_counter() или time.monotonic(), которые гарантируют монотонный ход.
Как получить текущую дату и время в виде строки?
Функция time.strftime() форматирует структуру времени по заданному шаблону. Например, для вывода даты в формате "ГГГГ-ММ-ДД ЧЧ:ММ:СС":
import time
now = time.localtime()
date_str = time.strftime("%Y-%m-%d %H:%M:%S", now)
print(date_str)
Python определить время (определение времени в python)
2023-04-24 15:30:45
Python время года (определение времени года по дате в python)
Ошибка: Неправильный формат строки приводит к исключению. Например, использование недопустимого кода формата. Решение: Сверяться с документацией Python по strftime и strptime кодам.
Как преобразовать строку с датой в структуру времени?
Используется time.strptime(). Важно, чтобы строка соответствовала формату.
import time
date_string = "24.04.2023 15:30:00"
parsed = time.strptime(date_string, "%d.%m.%Y %H:%M:%S")
print(parsed)
Python реальное время (получение реального времени в python)
time.struct_time(tm_year=2023, tm_mon=4, tm_mday=24, tm_hour=15, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=114, tm_isdst=-1)
время в секунды python (преобразование времени в секунды в python)
Ошибка: Несоответствие формата приводит к ValueError. Решение: Проверять соответствие строки шаблону. Также стоит учитывать локализацию: strptime использует настройки локали для названий месяцев и дней.
Как сделать задержку с точностью до миллисекунд?
time.sleep() принимает число с плавающей точкой, что позволяет задать задержку, например, 0.5 секунды (500 мс).
import time
time.sleep(0.5) # пауза 500 миллисекунд
print("Прошло полсекунды")
Python datetime время (работа с datetime в python)
Проблема: Фактическая задержка может отличаться от запрошенной из-за планировщика ОС. Решение: Для критически точных задержек использовать аппаратные таймеры или циклы ожидания (не рекомендуется). Обычно time.sleep() достаточно.
Как получить время в формате UTC, а не локальное?
Функция time.gmtime() возвращает время по Гринвичу.
import time
utc_time = time.gmtime()
print("UTC:", time.strftime("%Y-%m-%d %H:%M:%S", utc_time))
Python 3 время (работа с временем в python 3)
Как конвертировать секунды в дни, часы, минуты?
Можно воспользоваться арифметикой или модулем divmod.
import time
seconds = 98765
days, remainder = divmod(seconds, 86400)
hours, remainder = divmod(remainder, 3600)
minutes, secs = divmod(remainder, 60)
print(f"{days} дн {hours} ч {minutes} мин {secs} сек")
Python задать время (установка времени в python)
1 дн 3 ч 26 мин 5 сек
Расширенные примеры использования модуля time
Ниже приведены менее распространенные, но полезные сценарии.
Измерение времени с помощью time.monotonic()
time.monotonic() возвращает монотонно возрастающее время, не зависящее от системных изменений. Идеально для измерения интервалов.
import time
start = time.monotonic()
time.sleep(2)
end = time.monotonic()
print(f"Прошло {end - start:.3f} секунд")
Прошло 2.001 секунд
Использование time.ctime() для быстрого вывода
time.ctime([secs]) преобразует секунды или текущее время в строку фиксированного формата.
import time
print(time.ctime())
print(time.ctime(0)) # начало эпохи
Mon Apr 24 15:30:00 2023 Thu Jan 1 00:00:00 1970
Структура struct_time и ее атрибуты
Кроме атрибутов tm_year, tm_mon и т.д., есть tm_wday (день недели: 0-пн, 6-вс), tm_yday (день года), tm_isdst (флаг летнего времени).
import time
t = time.localtime()
print(f"День недели: {t.tm_wday}, день года: {t.tm_yday}, летнее время: {t.tm_isdst}")
Парсинг времени с учетом локали
Если строка содержит названия месяцев на русском, нужно установить соответствующую локаль.
import time
import locale
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')
date_str = "24 апреля 2023"
parsed = time.strptime(date_str, "%d %B %Y")
print(parsed)
time.struct_time(tm_year=2023, tm_mon=4, tm_mday=24, ...)
Примечание: Локаль должна быть установлена в системе, иначе возникнет ошибка. В Windows может потребоваться 'Russian_Russia.1251'.
Сравнение времени с помощью time.mktime()
time.mktime() преобразует struct_time в секунды (по местному времени). Удобно для сравнения.
import time
t1 = time.strptime("2023-01-01", "%Y-%m-%d")
t2 = time.strptime("2023-12-31", "%Y-%m-%d")
sec1 = time.mktime(t1)
sec2 = time.mktime(t2)
print(f"Разница в днях: {(sec2 - sec1) / 86400}")
Разница в днях: 364.0
Обработка исключений при парсинге
При неверном формате strptime выбрасывает ValueError. Желательно оборачивать в try-except.
import time
date_string = "24.04.2023 15:30:00"
try:
parsed = time.strptime(date_string, "%d-%m-%Y %H:%M:%S")
except ValueError as e:
print(f"Ошибка: {e}")
Ошибка: time data '24.04.2023 15:30:00' does not match format '%d-%m-%Y %H:%M:%S'
Использование time.thread_time() для многопоточности
time.thread_time() возвращает сумму времени CPU для текущего потока. Полезно для профилирования нитей.
import time
import threading
def worker():
t0 = time.thread_time()
total = 0
for i in range(1_000_000):
total += i
t1 = time.thread_time()
print(f"Время CPU потока: {t1 - t0:.6f} сек")
t = threading.Thread(target=worker)
t.start()
t.join()
Время CPU потока: 0.012345 сек (примерно)