Sobes.tech
Middle

Millised on erinevused pytz teegi ja datetime mooduli vahel Pythonis?

sobes.tech AI

Vastus AI-lt

datetime moodul pakub põhiliike kuupäeva ja kellaaja töötlemiseks, kuid selle ajavööndite tugi on piiratud. See saab luua ajavööndi teabega objekte (timezone-aware objects), kuid ise ei sisalda ajavööndite andmebaasi ega suveaja ülemineku reegleid.

Raamatukogu pytz (standardselt tööriist Pythonis ajavöönditega töötamiseks) pakub laia ajavööndite andmebaasi (teostab IANA Time Zone Database spetsifikatsiooni). See võimaldab korrektselt teisendada aega erinevate ajavööndite vahel, arvestades ajaloolisi muudatusi ja suveaja ülemineku reegleid.

Peamised erinevused:

  • Ajavööndite andmebaas: pytz-l on sisseehitatud andmebaas, datetime-l (standardses raamatukogus) — mitte.
  • Ajavööndi teadlikud objektid: pytz-ga tehakse see ajavööndi objekti tzinfo välja määramisega. datetime-s saab määrata tzinfo, kuid ilma andmebaasita see on vähem kasulik reaalsete ajavööndite ja üleminekute puhul.
  • Suveaja üleminekute töötlemine: pytz käsitleb õigesti ajaloolisi suveaja üleminekuid ja ajavööndite muudatusi. datetime — mitte.
  • Lokaliseerimine: pytz on vajalik, et saada korrektne lokaliseeritud aeg määratud ajavööndi jaoks.

Näide datetime objekti loomise kohta ajavööndi arvestusega pytz-i kasutades:

import datetime
import pytz

# Saada ajavööndi objekt New Yorgi jaoks
ny_tz = pytz.timezone('America/New_York')

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

# Muuda naive datetime ajavööndi teadlikuks objektiks New Yorgi jaoks
aware_dt_ny = ny_tz.localize(naive_dt)

# Muuda teise ajavööndi (nt UTC) jaoks
aware_dt_utc = aware_dt_ny.astimezone(pytz.utc)

# Näita tulemusi
print(f"Naive datetime: {naive_dt}")
print(f"New York aware datetime: {aware_dt_ny}")
print(f"UTC aware datetime: {aware_dt_utc}")