Форматирование временных объектов в текстовую строку с Python

Раздел: 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

Преобразование времени в строку в Python - comments

En
Python время в строку (python)