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:
datetimedatetimetimedelta- 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.