Ce face Fusuri orare: timezone, astimezone() și ZoneInfo
timezone(timedelta(hours=2)) creează un fus cu decalaj fix față de UTC; timezone.utc (sau datetime.UTC) este UTC. Pentru fusuri reale, cu ora de vară, folosește zoneinfo.ZoneInfo("Europe/Bucharest"). tzinfo este clasa de bază abstractă a tuturor fusurilor.
astimezone(tz) convertește același moment în alt fus. utcoffset() dă decalajul față de UTC, tzname() numele fusului (de exemplu EEST), iar dst() cât din decalaj se datorează orei de vară. Metodele există pe datetime, time și pe obiectele timezone; timezone.fromutc() este folosită intern de astimezone.
Parametri
| Parametru | Descriere |
|---|---|
offset |
Decalajul față de UTC, ca timedelta. |
name |
Opțional. Numele afișat al fusului. |
tz |
Pentru astimezone: fusul țintă. |
Ce returnează
astimezone: un datetime nou. utcoffset/dst: timedelta. tzname: text.
Exemple
Exemplul 1: Conversii între fusuri
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
bucuresti = ZoneInfo("Europe/Bucharest")
sedinta = datetime(2026, 10, 19, 15, 0, tzinfo=bucuresti)
print(sedinta, sedinta.tzname(), sedinta.utcoffset(), sedinta.dst())
print(sedinta.astimezone(timezone.utc))
print(sedinta.astimezone(ZoneInfo("America/New_York")))
iarna = datetime(2026, 12, 19, 15, 0, tzinfo=bucuresti)
print(iarna.tzname(), iarna.utcoffset(), iarna.dst())
Rezultat
2026-10-19 15:00:00+03:00 EEST 3:00:00 1:00:00
2026-10-19 12:00:00+00:00
2026-10-19 08:00:00-04:00
EET 2:00:00 0:00:00
Exemplul 2: Fus cu decalaj fix
from datetime import datetime, timezone, timedelta, time, tzinfo
plus2 = timezone(timedelta(hours=2), "EET fix")
print(plus2.utcoffset(None), plus2.tzname(None), plus2.dst(None))
d = datetime(2026, 1, 10, 12, 0, tzinfo=timezone.utc)
print(plus2.fromutc(d.replace(tzinfo=plus2)))
print(d.astimezone(plus2))
t = time(9, 30, tzinfo=plus2)
print(t.utcoffset(), t.tzname(), t.dst(), isinstance(plus2, tzinfo))
Rezultat
2:00:00 EET fix None
2026-01-10 14:00:00+02:00
2026-01-10 14:00:00+02:00
2:00:00 EET fix None True
Greșeli frecvente
- Construiești un fus cu
timezone(timedelta(hours=2))pentru România și uiți ora de vară (+3 vara). FoloseșteZoneInfo("Europe/Bucharest"). - Pui fusul pe o dată cu
replace(tzinfo=...)crezând că o convertești.replacedoar etichetează aceeași oră; conversia se face cuastimezone.
Comenzi înrudite
datetime.datetime: Clasa pentru o dată împreună cu ora: creare, data și ora curentă, calcule și comparații.timestamp() și fromtimestamp(): Conversia între date și timestamp-uri Unix (secunde de la 1 ianuarie 1970 UTC).time.tzset(): Reîncarcă setările de fus orar după variabila de mediu TZ.