Форматирование временных объектов в текстовую строку с Python
Основные методы форматирования времени
Наиболее эффективное решение: использование strftime
Метод strftime доступен у объектов datetime и time. Он принимает строку формата с директивами, начинающимися с %, и возвращает отформатированную строку. Это универсальный и быстрый способ.
from datetime import datetime
now = datetime.now()
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted)
Python время в строку (преобразование времени в строку в python)
2025-04-03 14:25:30
Здесь %Y - год с четырьмя цифрами, %m - номер месяца (01–12), %d - день месяца, %H - час (00–23), %M - минуты, %S - секунды.
Как отформатировать текущую дату в формате ГГГГ-ММ-ДД?
Используйте директивы %Y, %m, %d:
from datetime import date
today = date.today()
print(today.strftime("%Y-%m-%d"))
2025-04-03
Типичная ошибка:
Путаница между %m (месяц) и %M (минуты). Если написать %M вместо %m, вместо месяца появится количество минут текущего часа.
Как вывести время в 24-часовом формате с секундами?
Комбинация %H:%M:%S:
from datetime import datetime
now = datetime.now()
print(now.strftime("%H:%M:%S"))
14:25:30
Как использовать f-строки для форматирования даты?
Начиная с Python 3.6, можно вставить директивы форматирования прямо в f-строку, используя синтаксис f"{now:%d.%m.%Y}".
from datetime import datetime
now = datetime.now()
print(f"{now:%d.%m.%Y %H:%M}")
03.04.2025 14:25
Этот способ короче и не требует вызова strftime, но менее гибок при необходимости динамического формата.
Как получить строку в формате ISO 8601?
Метод isoformat() возвращает стандартное представление:
from datetime import datetime
now = datetime.now()
print(now.isoformat())
2025-04-03T14:25:30.123456
Если нужна только дата, используется date.isoformat().
Как учесть часовой пояс при форматировании?
Сначала создайте временную зону (через zoneinfo или pytz), затем локализуйте объект datetime:
from datetime import datetime
import zoneinfo
tz = zoneinfo.ZoneInfo("Europe/Moscow")
moscow_now = datetime.now(tz)
print(moscow_now.strftime("%Y-%m-%d %H:%M:%S %Z"))
2025-04-03 11:25:30 MSK
Возможная проблема:
Объект без часового пояса (naive) при форматировании со смещением вызовет ошибку. Добавляйте часовой пояс через replace(tzinfo=...) или используйте astimezone.
Как отобразить дату с названием месяца на русском языке?
Используйте модуль locale для установки русской локали:
import locale
from datetime import datetime
locale.setlocale(locale.LC_TIME, "ru_RU.UTF-8")
now = datetime.now()
print(now.strftime("%d %B %Y"))
03 апреля 2025
Типичная ошибка:
Локаль может быть не установлена в системе. В этом случае Python выбросит исключение locale.Error. Проверьте доступные локали командой locale -a.
Общие проблемы при преобразовании времени в строку
- Использование неправильных директив:
%Yвместо%y,%I(12-часовой формат) без%p(AM/PM). - Забытый импорт:
from datetime import datetimeилиimport time. - Форматирование
timedelta: у него нет методаstrftime. Для вывода интервала используйте арифметику или преобразование в строку вручную. - Путаница с временными зонами: naive объекты могут интерпретироваться как локальное время.
Расширенные примеры форматирования времени
1. Преобразование Unix-метки времени в строку с учётом часового пояса.
import time
from datetime import datetime, timezone
ts = 1743600000 # пример метки
dt = datetime.fromtimestamp(ts, tz=timezone.utc)
print(dt.strftime("%Y-%m-%d %H:%M:%S %Z"))
2025-04-02 20:26:40 UTC
2. Форматирование с микросекундами и наносекундами (наносекунды через дробную часть).
from datetime import datetime
now = datetime.now()
# Микросекунды - %f, 6 цифр
print(now.strftime("%H:%M:%S.%f"))
# Если нужно больше знаков, вручную обрезать или дополнить
14:25:30.123456
3. Использование локали для вывода дня недели и сокращённого месяца.
import locale
from datetime import datetime
locale.setlocale(locale.LC_TIME, "de_DE.UTF-8") # немецкий язык
now = datetime.now()
print(now.strftime("%A, %d. %B %Y"))
Donnerstag, 03. April 2025
4. Преобразование разницы во времени (timedelta) в читаемую строку.
from datetime import timedelta
delta = timedelta(days=5, hours=3, minutes=45)
# Ручное форматирование
days = delta.days
hours, remainder = divmod(delta.seconds, 3600)
minutes, _ = divmod(remainder, 60)
formatted = f"{days} дн. {hours} ч. {minutes} мин."
print(formatted)
5 дн. 3 ч. 45 мин.
5. Генерация строки с номером недели и днём года.
from datetime import datetime
now = datetime.now()
# %W - номер недели (понедельник - первый день), %j - день года
print(now.strftime("Неделя %W, день %j"))
Неделя 14, день 093
6. Форматирование с использованием time.strftime из модуля time.
import time
now_tuple = time.localtime()
formatted = time.strftime("%d.%m.%Y %H:%M:%S", now_tuple)
print(formatted)
03.04.2025 14:25:30
7. Преобразование строки обратно в datetime (для проверки корректности формата).
from datetime import datetime
date_str = "2025-04-03 14:25:30"
parsed = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(parsed)
2025-04-03 14:25:30
8. Форматирование с указанием AM/PM (12-часовой формат).
from datetime import datetime
now = datetime.now()
print(now.strftime("%I:%M:%S %p"))
02:25:30 PM