Sobes.tech
Middle

Pythonдеги pytz китабканасы менен datetime модулунун айырмачылыктары эмнеде?

sobes.tech AI

AIден жооп

datetime модулу дата жана убакыт менен иштөө үчүн негизги түрлөрдү камсыз кылат, бирок анын саат белдеилерине колдоосу чектелген. Ал саат белдеилерине байланыштуу маалыматтарды камтыган объекттерди түзө алат (timezone-aware objects), бирок өзү саат белдеилеринин базасы жана жазгы убакытка өтүү эрежелери менен камсыз кылган эмес.

pytz китепканасы (Pythonдо саат белдеилери менен иштөө үчүн стандарттык каражат) кеңири саат белдеилеринин базасын камсыз кылат (IANA Time Zone Database спецификациясын ишке ашырат). Ал убакытты ар кандай саат белдеилеринин ортосунда туура түрдө которууга мүмкүндүк берет, тарыхый өзгөрүүлөрдү жана жазгы убакытка өтүү эрежелерин эске алат.

Негизги айырмачылыктар:

  • Саат белдеилеринин базасы: pytz өзүнүн базасына ээ, datetime (стандарттык китепканада) — жок.
  • Timezone-aware объекттерди түзүү: pytz менен бул tzinfo талаасына саат белдеи объектисин коюу аркылуу жасалат. datetime-да tzinfo көрсөтсө болот, бирок базанын жоктугу реалдуу саат белдеилерине, жазгы убакытка өтүүлөргө пайдалуу эмес.
  • Жазгы убакытка өтүүлөрдү иштетүү: pytz тарыхый жазгы убакытка өтүүлөрдү жана саат белдеилеринин өзгөрүүлөрүн туура иштетет. datetime — жасай албайт.
  • Локализация: pytz белгилүү бир саат белдеиси үчүн туура локализацияланган убакыт алуу үчүн зарыл.

pytz колдонуп, саат белдеисин эске алуу менен datetime объектисин түзүү мисалы:

import datetime
import pytz

# Нью-Йорк үчүн саат белдеи объектисин алуу
ny_tz = pytz.timezone('America/New_York')

# Naive datetime объектисин түзүү
naive_dt = datetime.datetime(2023, 10, 27, 12, 0, 0)

# Naive datetime-ди саат белдеи менен иштөөчү объектке айландыруу
aware_dt_ny = ny_tz.localize(naive_dt)

# Башка саат белдеисине которуу (мисалы, UTC)
aware_dt_utc = aware_dt_ny.astimezone(pytz.utc)

# Натыйжаларды чыгарыңыз
print(f"Naive datetime: {naive_dt}")
print(f"New York aware datetime: {aware_dt_ny}")
print(f"UTC aware datetime: {aware_dt_utc}")