Работа с текущим временем в Python требует обращения к модулю datetime, встроенному в стандартную библиотеку. Этот модуль предоставляет класс datetime, который позволяет точно определить текущее локальное или UTC-время с точностью до микросекунд.
Чтобы получить текущее локальное время, используйте конструкцию datetime.now(). Для получения времени по универсальному координированному времени (UTC) – datetime.utcnow(). Разница между ними принципиальна: now() зависит от настроек часового пояса операционной системы, utcnow() – нет.
Если интересует только текущее время без даты, извлеките его с помощью метода .time(): datetime.now().time(). Для форматирования времени применяется метод strftime(). Например, строка datetime.now().strftime(«%H:%M:%S») вернёт текущее время в виде «часы:минуты:секунды».
Для точного измерения временных интервалов или создания таймеров рекомендуется использовать модуль time с функцией time(), возвращающей количество секунд с начала эпохи UNIX. Это особенно полезно для профилирования и логирования событий.
Как получить текущее время с помощью модуля datetime
Модуль datetime
входит в стандартную библиотеку Python и предоставляет класс datetime
, с помощью которого можно получить точное текущее время до микросекунд. Для этого используется метод datetime.now()
, возвращающий объект с полным набором временных атрибутов.
from datetime import datetime
now = datetime.now()
print(now)
Чтобы получить только время без даты, применяется метод .time()
:
current_time = datetime.now().time()
print(current_time)
Атрибуты объекта времени доступны напрямую:
t = datetime.now().time()
print(t.hour, t.minute, t.second)
Для форматирования времени в строку используют метод strftime()
:
formatted = datetime.now().strftime("%H:%M:%S")
print(formatted)
Форматные коды:
%H |
Часы (00–23) |
%M |
Минуты (00–59) |
%S |
Секунды (00–59) |
%f |
Микросекунды (000000–999999) |
Для получения времени в UTC используйте datetime.utcnow()
:
utc_time = datetime.utcnow()
print(utc_time)
Объекты datetime
поддерживают сравнение, извлечение разницы и преобразование в строку без дополнительных библиотек.
Как вывести время в разных форматах: строки и объекты
Для получения текущего времени как объекта используется функция datetime.now()
из модуля datetime
. Возвращается экземпляр datetime
с полным набором информации: дата, время, микросекунды.
Если необходимо преобразовать строку обратно в объект времени, используйте datetime.strptime()
. Пример: datetime.strptime("15:42:10", "%H:%M:%S")
создаст объект datetime
с заданным временем, дата будет установлена по умолчанию (1900-01-01).
Для работы исключительно со временем (без даты) применяйте класс datetime.time
, получив его через datetime.now().time()
. Форматирование и преобразование аналогичны.
Используйте объекты времени для вычислений и логики, строки – для отображения пользователю или логирования. Не смешивайте их без необходимости: преобразование в строку уничтожает структуру, необходимую для точных операций.
Как получить текущее время с использованием time.time()
Функция time.time() из модуля time возвращает количество секунд, прошедших с начала эпохи Unix (01.01.1970 00:00:00 UTC), в виде числа с плавающей точкой. Это значение удобно для измерения временных интервалов, профилирования кода и точной фиксации моментов времени.
Пример использования:
import time
timestamp = time.time()
print(timestamp)
Чтобы преобразовать полученный результат в удобочитаемый формат, используйте time.ctime() или datetime.fromtimestamp():
from datetime import datetime
dt = datetime.fromtimestamp(time.time())
print(dt.strftime("%Y-%m-%d %H:%M:%S"))
Для точного измерения времени выполнения кода предпочтительнее использовать time.perf_counter(), но time.time() остаётся универсальным инструментом для фиксации абсолютного времени.
Как работать с временными зонами в Python
Для работы с часовыми поясами используйте модуль pytz
в связке с datetime
. Установите pytz
через pip install pytz
, если он не установлен.
Создание объекта времени с временной зоной выполняется так:
from datetime import datetime
import pytz
dt = datetime.now(pytz.timezone("Europe/Moscow"))
Для перевода времени из одной зоны в другую:
dt_utc = dt.astimezone(pytz.utc)
Чтобы избежать неоднозначностей при переходе на летнее время, всегда используйте метод localize
для наивных объектов datetime
:
naive = datetime(2025, 3, 30, 2, 30)
tz = pytz.timezone("Europe/Berlin")
aware = tz.localize(naive, is_dst=None)
Полный список доступных часовых поясов получите через pytz.all_timezones
.
Для универсальной работы с временем храните его в UTC, а отображение производите в нужной зоне с помощью astimezone()
.
При сериализации времени (например, в JSON) сохраняйте его в ISO-формате с указанием зоны:
dt.isoformat()
. Это предотвращает потерю контекста при передаче между системами.
Функция strftime()
из модуля datetime
позволяет преобразовать объект времени в строку заданного формата. Используются директивы, каждая из которых обозначает конкретный компонент даты или времени.
%H
– часы в 24-часовом формате (00–23)%I
– часы в 12-часовом формате (01–12)%M
– минуты (00–59)%S
– секунды (00–59)%p
– AM или PM%d
– день месяца (01–31)%m
– номер месяца (01–12)%Y
– полный год (например, 2025)%A
– полное название дня недели%B
– полное название месяца
from datetime import datetime
now = datetime.now()
formatted = now.strftime("%d %B %Y, %H:%M:%S")
print(formatted)
import locale
locale.setlocale(locale.LC_TIME, "ru_RU.UTF-8")
Для составления нестандартных форматов комбинируйте директивы с любыми разделителями. Например, "%Hч %Mмин"
даст результат вроде «14ч 30мин».
Как вывести текущее время в миллисекундах и микросекундах
Для получения текущего времени с точностью до милли- и микросекунд используйте модуль datetime
или time
в зависимости от задачи. Ниже – конкретные способы.
-
Микросекунды через datetime:
from datetime import datetime now = datetime.now() print("Микросекунды:", now.microsecond)
Возвращает значение от 0 до 999999 – микросекундную часть текущего времени.
-
Миллисекунды через datetime:
from datetime import datetime now = datetime.now() milliseconds = int(now.microsecond / 1000) print("Миллисекунды:", milliseconds)
Преобразование микросекунд в миллисекунды с округлением вниз.
-
Время в миллисекундах с начала эпохи:
import time ms = int(time.time() * 1000) print("Время в миллисекундах:", ms)
Полное количество миллисекунд с 1 января 1970 года (Unix-время).
-
Время в микросекундах с начала эпохи:
import time us = int(time.time() * 1_000_000) print("Время в микросекундах:", us)
Точное значение до микросекунд, полезно для логирования и временных меток.
-
Высокоточная метка времени:
import time t = time.perf_counter() print("Высокоточная метка (секунды):", t)
Для измерения временных интервалов с точностью до микросекунд. Не привязано к системному времени.
Для сериализации времени используйте strftime
с дополнительной обработкой микросекунд, так как формат %f
возвращает шесть цифр (000000–999999), представляющих микросекунды.
Как обновлять время в реальном времени в Python
Для отображения текущего времени с обновлением каждую секунду используйте модуль datetime совместно с функциями из time и os или tkinter для графического интерфейса. Ниже представлен минималистичный подход для терминала и GUI.
Пример для консоли:
import time
from datetime import datetime
import os
try:
while True:
os.system('cls' if os.name == 'nt' else 'clear')
print(datetime.now().strftime('%H:%M:%S'))
time.sleep(1)
except KeyboardInterrupt:
pass
Пример для tkinter:
import tkinter as tk
from datetime import datetime
def update_time():
label.config(text=datetime.now().strftime('%H:%M:%S'))
root.after(1000, update_time)
root = tk.Tk()
label = tk.Label(root, font=('Arial', 48))
label.pack()
update_time()
root.mainloop()
Здесь используется метод after, который запускает обновление текста каждую секунду без блокировки основного потока. Для точности избегайте time.sleep() в GUI-приложениях.
Для проектов с требованиями к высокой точности обновления времени следует использовать threading или asyncio с учетом управления ресурсами и откликом интерфейса.