15. Sana, vaqt va kalendar bilan ishlash

Dasturlashda sana va vaqt bilan ishlash juda ko‘p uchraydi.

Masalan:

foydalanuvchi ro‘yxatdan o‘tgan vaqtni saqlash
buyurtma yaratilgan sanani ko‘rsatish
ikki sana orasidagi farqni hisoblash
muddatni aniqlash
uchrashuv vaqtini hisoblash
vaqt zonalari bilan ishlash
kalendar ma’lumotlarini yaratish

Python'da sana va vaqt bilan ishlash uchun bir nechta standart modullar mavjud.

Bu bobda:

  • datetime
  • date
  • time
  • timedelta
  • sana va vaqtni formatlash
  • vaqt zonalari
  • kalendar amallari

bilan ishlashni o‘rganamiz.


datetime moduli

Python'da sana va vaqt bilan ishlash uchun asosiy modul:

import datetime

Masalan, hozirgi sana va vaqtni olish:

import datetime

hozir = datetime.datetime.now()

print(
    f"Hozirgi sana va vaqt: {hozir}"
)

Natija kompyuterdagi joriy vaqtga bog‘liq bo‘ladi.


datetime klassini to‘g‘ridan-to‘g‘ri import qilish

Quyidagicha yozish ham mumkin:

from datetime import datetime

hozir = datetime.now()

print(
    f"Hozir: {hozir}"
)

Bu usul kodni qisqartiradi.


Hozirgi sana

Faqat bugungi sanani olish uchun date.today() ishlatiladi.

from datetime import date

bugun = date.today()

print(
    f"Bugungi sana: {bugun}"
)

Masalan:

Bugungi sana: 2026-08-23

date

date faqat sana bilan ishlaydi.

U uchta asosiy qiymatdan tashkil topadi:

yil
oy
kun

Masalan:

from datetime import date

sana = date(
    2026,
    8,
    23
)

print(
    f"Sana: {sana}"
)

Natija:

Sana: 2026-08-23

Sana qismlarini olish

from datetime import date

bugun = date.today()

print(
    f"Yil: {bugun.year}"
)

print(
    f"Oy: {bugun.month}"
)

print(
    f"Kun: {bugun.day}"
)

datetime

datetime sana bilan birga vaqtni ham saqlaydi.

from datetime import datetime

vaqt = datetime(
    2026,
    8,
    23,
    15,
    30,
    45
)

print(
    f"Sana va vaqt: {vaqt}"
)

Natija:

Sana va vaqt: 2026-08-23 15:30:45

datetime qismlari

from datetime import datetime

vaqt = datetime.now()

print(
    f"Yil: {vaqt.year}"
)

print(
    f"Oy: {vaqt.month}"
)

print(
    f"Kun: {vaqt.day}"
)

print(
    f"Soat: {vaqt.hour}"
)

print(
    f"Daqiqa: {vaqt.minute}"
)

print(
    f"Soniya: {vaqt.second}"
)

time

time klassi faqat vaqtni ifodalash uchun ishlatiladi.

from datetime import time

vaqt = time(
    15,
    30,
    45
)

print(
    f"Vaqt: {vaqt}"
)

Natija:

Vaqt: 15:30:45

time qismlari

from datetime import time

vaqt = time(
    15,
    30,
    45
)

print(
    f"Soat: {vaqt.hour}"
)

print(
    f"Daqiqa: {vaqt.minute}"
)

print(
    f"Soniya: {vaqt.second}"
)

Sana yaratish

Muayyan sana yaratish mumkin:

from datetime import date

tugilgan_sana = date(
    2000,
    5,
    15
)

print(
    f"Tug‘ilgan sana: {tugilgan_sana}"
)

Sanalarni solishtirish

date obyektlarini solishtirish mumkin.

from datetime import date

birinchi_sana = date(
    2026,
    8,
    10
)

ikkinchi_sana = date(
    2026,
    8,
    20
)

if birinchi_sana < ikkinchi_sana:

    print(
        "Birinchi sana oldinroq."
    )

Tenglikni tekshirish

from datetime import date

birinchi_sana = date(
    2026,
    8,
    23
)

ikkinchi_sana = date(
    2026,
    8,
    23
)

if birinchi_sana == ikkinchi_sana:

    print(
        "Sanalar bir xil."
    )

timedelta

timedelta ikki vaqt oralig‘idagi farq bilan ishlash yoki sanaga vaqt qo‘shish uchun ishlatiladi.

from datetime import date, timedelta

bugun = date.today()

ertaga = bugun + timedelta(
    days=1
)

print(
    f"Bugun: {bugun}"
)

print(
    f"Ertaga: {ertaga}"
)

Bir necha kun qo‘shish

from datetime import date, timedelta

bugun = date.today()

kelajak_sana = bugun + timedelta(
    days=30
)

print(
    f"30 kundan keyin: {kelajak_sana}"
)

Bir necha kun ayirish

from datetime import date, timedelta

bugun = date.today()

oldingi_sana = bugun - timedelta(
    days=7
)

print(
    f"7 kun oldin: {oldingi_sana}"
)

Hafta qo‘shish

from datetime import date, timedelta

bugun = date.today()

kelajak_sana = bugun + timedelta(
    weeks=2
)

print(
    f"2 haftadan keyin: {kelajak_sana}"
)

Soat va daqiqa qo‘shish

timedelta bilan kun, soniya, mikrosoniya, millisekund, daqiqa, soat va hafta bilan ishlash mumkin.

from datetime import datetime, timedelta

hozir = datetime.now()

kelajak_vaqt = hozir + timedelta(
    hours=5,
    minutes=30
)

print(
    f"Hozir: {hozir}"
)

print(
    f"5 soat 30 daqiqadan keyin: {kelajak_vaqt}"
)

Ikki sana orasidagi farq

Ikki date obyektini ayirish mumkin.

from datetime import date

birinchi_sana = date(
    2026,
    8,
    1
)

ikkinchi_sana = date(
    2026,
    8,
    23
)

farq = ikkinchi_sana - birinchi_sana

print(
    f"Farq: {farq.days} kun"
)

Natija:

Farq: 22 kun

Ikki datetime orasidagi farq

from datetime import datetime

boshlanish = datetime(
    2026,
    8,
    23,
    10,
    0
)

tugash = datetime(
    2026,
    8,
    23,
    15,
    30
)

farq = tugash - boshlanish

print(
    f"Farq: {farq}"
)

print(
    f"Soniya: {farq.total_seconds()}"
)

total_seconds()

timedelta obyektini umumiy soniyaga aylantirish mumkin.

from datetime import timedelta

davomiylik = timedelta(
    hours=2,
    minutes=30
)

soniyalar = davomiylik.total_seconds()

print(
    f"Umumiy soniya: {soniyalar}"
)

Natija:

Umumiy soniya: 9000.0

Sana formatlash

strftime() sana va vaqtni kerakli matn ko‘rinishiga o'tkazadi.

from datetime import datetime

hozir = datetime.now()

matn = hozir.strftime(
    "%Y-%m-%d"
)

print(
    f"Sana: {matn}"
)

Masalan:

Sana: 2026-08-23

Eng muhim format kodlari

%Y → to‘liq yil
%m → oy
%d → kun
%H → soat
%M → daqiqa
%S → soniya

Masalan:

from datetime import datetime

hozir = datetime.now()

matn = hozir.strftime(
    "%Y-%m-%d %H:%M:%S"
)

print(
    matn
)

Natija:

2026-08-23 15:30:45

Boshqa sana formati

from datetime import datetime

hozir = datetime.now()

matn = hozir.strftime(
    "%d.%m.%Y"
)

print(
    f"Bugungi sana: {matn}"
)

Natija:

Bugungi sana: 23.08.2026

O‘zbekcha ko‘rinishga yaqin format

from datetime import datetime

hozir = datetime.now()

matn = hozir.strftime(
    "%d-%m-%Y"
)

print(
    f"Bugun: {matn}"
)

Vaqtni formatlash

from datetime import datetime

hozir = datetime.now()

matn = hozir.strftime(
    "%H:%M"
)

print(
    f"Hozirgi vaqt: {matn}"
)

Masalan:

Hozirgi vaqt: 15:30

Sana va vaqtni birgalikda formatlash

from datetime import datetime

hozir = datetime.now()

matn = hozir.strftime(
    "%d.%m.%Y %H:%M:%S"
)

print(
    f"Sana va vaqt: {matn}"
)

Matndan sana olish — strptime()

strptime() matnni datetime obyektiga aylantiradi.

from datetime import datetime

matn = "23.08.2026"

sana = datetime.strptime(
    matn,
    "%d.%m.%Y"
)

print(
    f"Sana: {sana}"
)

strftime() va strptime() farqi

strftime():

datetime → matn

strptime():

matn → datetime

Masalan:

from datetime import datetime

vaqt = datetime.now()

matn = vaqt.strftime(
    "%Y-%m-%d"
)

qayta_vaqt = datetime.strptime(
    matn,
    "%Y-%m-%d"
)

print(
    f"Matn: {matn}"
)

print(
    f"Datetime: {qayta_vaqt}"
)

ISO format

Python sana va vaqtni ISO formatda ham ifodalashi mumkin.

from datetime import datetime

hozir = datetime.now()

matn = hozir.isoformat()

print(
    matn
)

Masalan:

2026-08-23T15:30:45

ISO formatdan datetime yaratish

from datetime import datetime

matn = "2026-08-23T15:30:45"

vaqt = datetime.fromisoformat(
    matn
)

print(
    f"Yil: {vaqt.year}"
)

print(
    f"Oy: {vaqt.month}"
)

print(
    f"Kun: {vaqt.day}"
)

Haftaning kunini aniqlash

weekday() haftaning kunini raqam bilan qaytaradi.

from datetime import date

bugun = date.today()

kun = bugun.weekday()

print(
    f"Hafta kuni raqami: {kun}"
)

Qiymatlar:

0 → Dushanba
1 → Seshanba
2 → Chorshanba
3 → Payshanba
4 → Juma
5 → Shanba
6 → Yakshanba

Haftaning kunini nom bilan chiqarish

from datetime import date

hafta_kunlari = [
    "Dushanba",
    "Seshanba",
    "Chorshanba",
    "Payshanba",
    "Juma",
    "Shanba",
    "Yakshanba"
]

bugun = date.today()

kun_nomi = hafta_kunlari[
    bugun.weekday()
]

print(
    f"Bugun: {kun_nomi}"
)

isoweekday()

isoweekday() ham hafta kunini qaytaradi, lekin raqamlash 1 dan boshlanadi.

1 → Dushanba
2 → Seshanba
3 → Chorshanba
4 → Payshanba
5 → Juma
6 → Shanba
7 → Yakshanba

Masalan:

from datetime import date

bugun = date.today()

print(
    f"Hafta kuni: {bugun.isoweekday()}"
)

Vaqt zonalari

Dastur turli mamlakatlarda ishlaganda vaqt zonalari muhim bo‘ladi.

Masalan:

O‘zbekiston
Janubiy Koreya
AQSh
Buyuk Britaniya
Yaponiya

turli vaqt zonalaridan foydalanadi.

Python'da zamonaviy vaqt zonalari bilan ishlash uchun zoneinfo modulidan foydalanish mumkin.

from datetime import datetime
from zoneinfo import ZoneInfo

Seul_vaqti = datetime.now(
    ZoneInfo("Asia/Seoul")
)

print(
    f"Seul vaqti: {Seul_vaqti}"
)

Boshqa vaqt zonasini olish

from datetime import datetime
from zoneinfo import ZoneInfo

London_vaqti = datetime.now(
    ZoneInfo("Europe/London")
)

Tokio_vaqti = datetime.now(
    ZoneInfo("Asia/Tokyo")
)

print(
    f"London vaqti: {London_vaqti}"
)

print(
    f"Tokio vaqti: {Tokio_vaqti}"
)

Vaqt zonasi bilan datetime

Muayyan vaqtni vaqt zonasi bilan yaratish mumkin.

from datetime import datetime
from zoneinfo import ZoneInfo

Seul_vaqti = datetime(
    2026,
    8,
    23,
    15,
    30,
    tzinfo=ZoneInfo("Asia/Seoul")
)

print(
    Seul_vaqti
)

Vaqt zonasini almashtirish

astimezone() yordamida vaqtni boshqa vaqt zonasiga o'tkazish mumkin.

from datetime import datetime
from zoneinfo import ZoneInfo

Seul_vaqti = datetime.now(
    ZoneInfo("Asia/Seoul")
)

London_vaqti = Seul_vaqti.astimezone(
    ZoneInfo("Europe/London")
)

print(
    f"Seul vaqti: {Seul_vaqti}"
)

print(
    f"London vaqti: {London_vaqti}"
)

Muhim jihat:

astimezone()

vaqtning o‘zini emas, uning boshqa vaqt zonasidagi ko‘rinishini hisoblaydi.


Naive va aware datetime

Python'da ikkita asosiy datetime turi mavjud.

Naive

Vaqt zonasi ko‘rsatilmagan:

from datetime import datetime

vaqt = datetime.now()

print(
    vaqt
)

Aware

Vaqt zonasi bilan:

from datetime import datetime
from zoneinfo import ZoneInfo

vaqt = datetime.now(
    ZoneInfo("Asia/Seoul")
)

print(
    vaqt
)

Katta tizimlarda vaqt zonalarini aniq ko‘rsatish muhim.


Kalendar moduli

Python'da kalendar bilan ishlash uchun:

import calendar

modulidan foydalanish mumkin.

Masalan, bir oy kalendarini chiqarish:

import calendar

kalendar = calendar.month(
    2026,
    8
)

print(
    kalendar
)

Muayyan oy kunlari soni

import calendar

kunlar_soni = calendar.monthrange(
    2026,
    8
)[1]

print(
    f"Oydagi kunlar soni: {kunlar_soni}"
)

Natija:

Oydagi kunlar soni: 31

Kabisa yilini tekshirish

calendar.isleap() yordamida yil kabisa yili ekanini tekshirish mumkin.

import calendar

yil = 2028

if calendar.isleap(
    yil
):

    print(
        f"{yil}-yil kabisa yili."
    )
else:

    print(
        f"{yil}-yil kabisa yili emas."
    )

Natija:

2028-yil kabisa yili.

Ikki sana orasidagi kunlar

from datetime import date

boshlanish_sanasi = date(
    2026,
    8,
    1
)

tugash_sanasi = date(
    2026,
    8,
    23
)

kunlar_soni = (
    tugash_sanasi
    - boshlanish_sanasi
).days

print(
    f"Oraliq: {kunlar_soni} kun"
)

Yoshni hisoblash

Tug‘ilgan sana orqali taxminiy yoshni hisoblash:

from datetime import date

tugilgan_sana = date(
    2000,
    5,
    15
)

bugun = date.today()

yosh = (
    bugun.year
    - tugilgan_sana.year
)

if (
    bugun.month,
    bugun.day
) < (
    tugilgan_sana.month,
    tugilgan_sana.day
):

    yosh -= 1

print(
    f"Yosh: {yosh}"
)

Muddatni hisoblash

Masalan, loyiha 30 kundan keyin tugaydi:

from datetime import date, timedelta

boshlanish_sanasi = date.today()

tugash_sanasi = (
    boshlanish_sanasi
    + timedelta(days=30)
)

print(
    f"Boshlanish: {boshlanish_sanasi}"
)

print(
    f"Tugash: {tugash_sanasi}"
)

Muddat tugaganini tekshirish

from datetime import date

muddat = date(
    2026,
    8,
    20
)

bugun = date.today()

if bugun > muddat:

    print(
        "Muddat tugagan."
    )
else:

    print(
        "Muddat hali tugamagan."
    )

Qolgan kunlarni hisoblash

from datetime import date

muddat = date(
    2026,
    12,
    31
)

bugun = date.today()

qolgan_kunlar = (
    muddat - bugun
).days

print(
    f"Muddatgacha qolgan kunlar: "
    f"{qolgan_kunlar}"
)

Ish kunlarini hisoblash

Oddiy usulda faqat dushanbadan jumagacha bo‘lgan kunlarni sanash mumkin.

from datetime import date, timedelta

boshlanish_sanasi = date(
    2026,
    8,
    1
)

tugash_sanasi = date(
    2026,
    8,
    31
)

joriy_sana = boshlanish_sanasi
ish_kunlari = 0

while joriy_sana <= tugash_sanasi:

    if joriy_sana.weekday() < 5:

        ish_kunlari += 1

    joriy_sana += timedelta(
        days=1
    )

print(
    f"Ish kunlari soni: {ish_kunlari}"
)

Bu usul bayram kunlarini hisobga olmaydi.


Amaliy loyiha — Softromeda loyiha muddati

Quyidagi dastur:

loyiha boshlanish sanasini oladi
30 kunlik muddatni hisoblaydi
tugash sanasini chiqaradi
qolgan kunlarni hisoblaydi
from datetime import date, timedelta


loyiha_boshlanish_sanasi = date(
    2026,
    8,
    23
)

loyiha_muddati = timedelta(
    days=30
)

loyiha_tugash_sanasi = (
    loyiha_boshlanish_sanasi
    + loyiha_muddati
)

bugun = date.today()

if bugun <= loyiha_tugash_sanasi:

    qolgan_kunlar = (
        loyiha_tugash_sanasi
        - bugun
    ).days

else:

    qolgan_kunlar = 0


print(
    "=== Softromeda loyiha ma'lumotlari ==="
)

print(
    f"Boshlanish sanasi: "
    f"{loyiha_boshlanish_sanasi}"
)

print(
    f"Tugash sanasi: "
    f"{loyiha_tugash_sanasi}"
)

print(
    f"Qolgan kunlar: "
    f"{qolgan_kunlar}"
)

Amaliy mashqlar

Mashq 1

Bugungi sanani ekranga chiqaring.

Mashq 2

Hozirgi sana va vaqtni:

DD.MM.YYYY HH:MM:SS

formatida chiqaring.

Mashq 3

Bugungi sanadan 100 kun keyingi sanani hisoblang.

Mashq 4

Bugungi sanadan 30 kun oldingi sanani hisoblang.

Mashq 5

Ikki sana orasidagi kunlar sonini hisoblang.

Mashq 6

Foydalanuvchining tug‘ilgan sanasi orqali yoshini hisoblang.

Mashq 7

Berilgan yil kabisa yili ekanini tekshiring.

Mashq 8

Berilgan oyda nechta kun borligini aniqlang.

Mashq 9

Asia/Seoul va Europe/London vaqtlarini bir vaqtda chiqaring.

Mashq 10

Softromeda loyihasi uchun boshlanish sanasi va tugash sanasini hisoblaydigan dastur yarating.


Bob xulosasi

Bu bobda Python'da sana va vaqt bilan ishlashni o‘rgandik.

Asosiy klasslar:

date
time
datetime
timedelta

Asosiy metodlar:

now()
today()
strftime()
strptime()
isoformat()
fromisoformat()
weekday()
isoweekday()
astimezone()

Kalendar bilan ishlash uchun:

import calendar

ishlatiladi.

Vaqt zonalari bilan ishlashda:

from zoneinfo import ZoneInfo

foydalanish mumkin.

Eng muhim tushunchalar:

date
    → faqat sana

time
    → faqat vaqt

datetime
    → sana + vaqt

timedelta
    → vaqt oralig‘i

strftime()
    → datetime → matn

strptime()
    → matn → datetime

ZoneInfo
    → vaqt zonasi

Sana va vaqt bilan to‘g‘ri ishlash real dasturlarda juda muhim, ayniqsa foydalanuvchilar turli mamlakat va vaqt zonalarida bo‘lsa.

Keyingi bobda 16. JSON, CSV va ma’lumotlar bilan ishlash mavzusini o‘rganamiz.