все Python 3datetimeпонятие
timezone aware datetime
timezone
Datetime с учётом часового пояса. Используй timezone из datetime или ZoneInfo из zoneinfo.
Синтаксис
from datetime import timezone
datetime.now(timezone.utc)
Naive и aware смешивать нельзя: вычитание или сравнение на больше/меньше datetime.now() и datetime.now(timezone.utc) даёт TypeError, а == молча даёт False, поэтому выбирайте что-то одно на весь проект — обычно UTC. timezone(timedelta(hours=3)) — фиксированный сдвиг, он ничего не знает о переходах на летнее время; для настоящих зон берите zoneinfo.ZoneInfo("Europe/Berlin") из стандартной библиотеки (Python 3.9+), pytz давно не нужен.
Примеры
from datetime import datetime, timezone, timedelta
utc_now = datetime.now(timezone.utc)
print(utc_now.tzinfo) # → UTC
print(utc_now.utcoffset()) # → 0:00:00
moscow_tz = timezone(timedelta(hours=3))
moscow_now = datetime.now(moscow_tz)
print(moscow_now.utcoffset()) # → 3:00:00
print(moscow_now.strftime('%z')) # → +0300
fixed = datetime(2024, 5, 17, 12, 30, tzinfo=timezone.utc)
print(fixed) # → 2024-05-17 12:30:00+00:00
print(fixed.astimezone(moscow_tz)) # → 2024-05-17 15:30:00+03:00
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности