Middle
Jaké jsou rozdíly mezi knihovnou pytz a modulem datetime v Pythonu?
sobes.tech AI
Odpověď od AI
Modul datetime poskytuje základní typy pro práci s daty a časy, ale podpora časových pásem je omezená. Může vytvářet objekty s informacemi o časovém pásmu (objekty s vědomím časového pásma), ale neobsahuje databázi časových pásem ani pravidla pro přechod na letní čas.
Knihovna pytz (de facto standard pro práci s časovými pásmy v Pythonu) nabízí rozsáhlou databázi časových pásem (implementující specifikaci IANA Time Zone Database). Umožňuje správně převádět čas mezi různými časovými pásmy, s ohledem na historické změny a pravidla přechodu na letní čas.
Hlavní rozdíly:
- Databáze časových pásem:
pytzmá vestavěnou databázi,datetime(v standardní knihovně) ne. - Vytváření objektů s vědomím časového pásma: S
pytzse to dělá přiřazením objektu časového pásma do poletzinfoobjektudatetime. Vdatetimelze specifikovattzinfo, ale bez databáze je to málo užitečné pro skutečná časová pásma s přechody na letní čas. - Zpracování přechodů na letní čas:
pytzsprávně zpracovává historické přechody a změny časových pásem.datetimeto nedělá. - Lokalizace:
pytzje nezbytné pro získání správného lokalizovaného času pro dané časové pásmo.
Příklad vytvoření objektu datetime s ohledem na časové pásmo pomocí pytz:
import datetime
import pytz
# Získání objektu časového pásma pro New York
ny_tz = pytz.timezone('America/New_York')
# Vytvoření naive datetime
naive_dt = datetime.datetime(2023, 10, 27, 12, 0, 0)
# Převod naive datetime na aware objekt pro New York
aware_dt_ny = ny_tz.localize(naive_dt)
# Převod do jiného časového pásma (například UTC)
aware_dt_utc = aware_dt_ny.astimezone(pytz.utc)
# Výpis výsledků
print(f"Naive datetime: {naive_dt}")
print(f"Aware datetime pro New York: {aware_dt_ny}")
print(f"Aware datetime v UTC: {aware_dt_utc}")