Sobes.tech
Middle

Kuo skiriasi pytz biblioteka nuo datetime modulio Python'e?

sobes.tech AI

Atsakymas iš AI

datetime modulis teikia pagrindinius tipus darbui su data ir laiku, tačiau jo laiko juostų palaikymas yra ribotas. Jis gali kurti objektus su laiko juostos informacija (timezone-aware objects), tačiau pats nesudaro laiko juostų duomenų bazės ir vasaros laiko perėjimo taisyklių.

Biblioteka pytz (standartinis įrankis darbui su laiko juostomis Python'e) teikia plačią laiko juostų duomenų bazę (įgyvendina IANA Time Zone Database specifikaciją). Ji leidžia teisingai konvertuoti laiką tarp skirtingų laiko juostų, atsižvelgiant į istorinius pokyčius ir vasaros laiko perėjimo taisykles.

Pagrindiniai skirtumai:

  • Laiko juostų duomenų bazė: pytz turi įmontuotą duomenų bazę, datetime (standartinėje bibliotekoje) — ne.
  • Laiko juostos-aware objektų kūrimas: Su pytz tai daroma priskiriant laiko juostos objektą tzinfo laukui. datetime galima nurodyti tzinfo, tačiau be duomenų bazės tai mažai naudinga realioms laiko juostoms su perėjimais.
  • Vasaros laiko perėjimų apdorojimas: pytz teisingai apdoroja istorinius vasaros laiko perėjimus ir laiko juostų pakeitimus. datetime — ne.
  • Lokaliacija: pytz būtina norint gauti teisingą lokalizuotą laiką nurodytai laiko juostai.

Pavyzdys, kaip sukurti datetime objektą su laiko juosta naudojant pytz:

import datetime
import pytz

# Gauti laiko juostos objektą Niujorkui
ny_tz = pytz.timezone('America/New_York')

# Sukurti naive datetime objektą
naive_dt = datetime.datetime(2023, 10, 27, 12, 0, 0)

# Paversti naive datetime į timezone-aware objektą Niujorkui
aware_dt_ny = ny_tz.localize(naive_dt)

# Konvertuoti į kitą laiko juostą (pvz., UTC)
aware_dt_utc = aware_dt_ny.astimezone(pytz.utc)

# Rodyti rezultatus
print(f"Naive datetime: {naive_dt}")
print(f"New York aware datetime: {aware_dt_ny}")
print(f"UTC aware datetime: {aware_dt_utc}")