47 / 59

Python datetime

datetime moduli bilan tanishish

Pythonda sana va vaqt bilan ishlash uchun datetime nomli modul bor.

U sana va vaqtlarni ifodalash va ular bilan ishlash uchun, shuningdek turli formatlarda sana va vaqtlarni formatlash va tahlil qilish (parsing) uchun turli xil klasslarni taqdim etadi.

1-misol: Joriy sana va vaqtni olish

example.py
import datetime

# joriy sana va vaqtni olish
now = datetime.datetime.now()

print(now)

Natija

kod
2022-12-27 08:26:49.219717

Bu yerda, biz import datetime operatori yordamida datetime modulini import qildik.

datetime modulida aniqlangan klasslardan biri — datetime klassi.

Keyin biz joriy lokal sana va vaqtni o'z ichiga olgan datetime obyektini yaratish uchun now() metodidan foydalandik.

2-misol: Joriy sanani olish

example.py
import datetime

# joriy sanani olish
current_date = datetime.date.today()

print(current_date)

Natija

kod
2022-12-27

Yuqoridagi misolda, biz joriy lokal sanani o'z ichiga olgan datetime obyektini olish uchun date klassida aniqlangan today() metodidan foydalandik.

datetime modulining atributlari

Modulning barcha atributlarini o'z ichiga olgan ro'yxatni olish uchun dir() funksiyasidan foydalanishimiz mumkin.

example.py
import datetime

print(dir(datetime))

Natija

kod
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

datetime modulining barcha atributlari orasida, eng ko'p ishlatiladigan klasslar quyidagilar:

  • datetime.datetime - sana va vaqtni o'z ichiga olgan, vaqtdagi bitta nuqtani ifodalaydi.
  • datetime.date - vaqtsiz sanani (yil, oy va kun) ifodalaydi.
  • datetime.time - sanasiz vaqtni (soat, daqiqa, soniya va mikrosoniya) ifodalaydi.
  • datetime.timedelta - davomiylikni ifodalaydi, datetime obyektlari bilan arifmetik amallarni bajarish uchun ishlatilishi mumkin.

Python datetime.date klassi

Pythonda, biz date klassidan date obyektlarini yaratishimiz mumkin. date obyekti sanani (yil, oy va kun) ifodalaydi.

3-misol: Sanani ifodalovchi date obyekti

example.py
import datetime

d = datetime.date(2022, 12, 25)
print(d)

Natija

kod
2022-12-25

Bu yerda, yuqoridagi misolda date() — date klassining konstruktori. Konstruktor uchta argumentni oladi: yil, oy va kun.

Faqat date klassini import qilish

Biz datetime modulidan faqat date klassini import qilishimiz mumkin. Masalan,

example.py
from datetime import date

d = date(2022, 12, 25)
print(d)

Natija

kod
2022-12-25

Bu yerda, from datetime import date datetime modulidan faqat date klassini import qiladi.

4-misol: today() yordamida joriy sanani olish

Biz today() nomli klass metodidan foydalanib, joriy sanani o'z ichiga olgan date obyektini yaratishimiz mumkin. Masalan,

example.py
from datetime import date

# joriy sanani olish uchun today()
todays_date = date.today()

print("Today's date =", todays_date)

Natija

kod
Today's date = 2022-12-27

5-misol: Timestamp'dan sanani olish

Biz shuningdek timestamp'dan ham sana obyektlari yaratishimiz mumkin.

UNIX timestamp — muayyan sana bilan 1970-yil 1-yanvar (UTC) orasidagi soniyalar soni. Siz timestamp'ni fromtimestamp() metodi yordamida sanaga aylantirishingiz mumkin.

example.py
from datetime import date

timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)

Natija

kod
Date = 2012-01-11

6-misol: Bugungi yil, oy va kunni chop etish

Biz date obyektidan yil, oy, kun, hafta kuni va h.k.ni osongina olishimiz mumkin. Masalan,

example.py
from datetime import date

# bugungi sananing date obyekti
today = date.today() 

print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)

Natija

kod
Current year: 2022
Current month: 12
Current day: 27

Python datetime.time klassi

time klassidan yaratilgan time obyekti lokal vaqtni ifodalaydi.

7-misol: Vaqtni ifodalovchi time obyekti

example.py
from datetime import time

# time(hour = 0, minute = 0, second = 0)
a = time()
print(a)

# time(soat, daqiqa va soniya)
b = time(11, 34, 56)
print(b)

# time(soat, daqiqa va soniya)
c = time(hour = 11, minute = 34, second = 56)
print(c)

# time(soat, daqiqa, soniya, mikrosoniya)
d = time(11, 34, 56, 234566)
print(d)

Natija

kod
a = 00:00:00
b = 11:34:56
c = 11:34:56
d = 11:34:56.234566

8-misol: Soat, daqiqa, soniya va mikrosoniyani chop etish

time obyektini yaratganimizdan so'ng, biz uning atributlarini, masalan soat, daqiqa va h.k.ni osongina chop etishimiz mumkin. Masalan,

example.py
from datetime import time

a = time(11, 34, 56)

print("Hour =", a.hour)
print("Minute =", a.minute)
print("Second =", a.second)
print("Microsecond =", a.microsecond)

Natija

kod
Hour = 11
Minute = 34
Second = 56
Microsecond = 0

Bu yerda, e'tibor bering, biz microsecond argumentini uzatmadik. Shuning uchun uning standart qiymati 0 chop etiladi.

datetime.datetime klassi

datetime modulida ham date, ham time obyektlaridan ma'lumotni o'z ichiga olishi mumkin bo'lgan datetime nomli klass bor.

9-misol: Python datetime obyekti

example.py
from datetime import datetime

# datetime(yil, oy, kun)
a = datetime(2022, 12, 28)
print(a)

# datetime(yil, oy, kun, soat, daqiqa, soniya, mikrosoniya)
b = datetime(2022, 12, 28, 23, 55, 59, 342380)
print(b)

Natija

kod
2022-12-28 00:00:00
2022-12-28 23:55:59.342380

datetime() konstruktoridagi birinchi uchta argument, yil, oy va kun majburiy.

10-misol: Yil, oy, soat, daqiqa va timestamp'ni chop etish

example.py
from datetime import datetime

a = datetime(2022, 12, 28, 23, 55, 59, 342380)

print("Year =", a.year)
print("Month =", a.month)
print("Hour =", a.hour)
print("Minute =", a.minute)
print("Timestamp =", a.timestamp())

Natija

kod
year = 202
month = 12
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238

Python datetime.timedelta klassi

timedelta obyekti ikkita sana yoki vaqt orasidagi farqni ifodalaydi. Masalan,

example.py
from datetime import datetime, date

# date() yordamida
t1 = date(year = 2018, month = 7, day = 12)
t2 = date(year = 2017, month = 12, day = 23)

t3 = t1 - t2

print("t3 =", t3)

# datetime() yordamida
t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33)
t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13)
t6 = t4 - t5
print("t6 =", t6)

print("Type of t3 =", type(t3)) 
print("Type of t6 =", type(t6))  

Natija

kod
t3 = 201 days, 0:00:00
t6 = -333 days, 1:14:20
Type of t3 = <class 'datetime.timedelta'>
Type of t6 = <class 'datetime.timedelta'>

E'tibor bering, t3 va t6ning ikkalasi ham <class 'datetime.timedelta'> turida.

12-misol: Ikkita timedelta obyekti orasidagi farq

example.py
from datetime import timedelta

t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33)
t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54)

t3 = t1 - t2

print("t3 =", t3)

Natija

kod
t3 = 14 days, 13:55:39

Bu yerda, biz ikkita timedelta obyekti t1 va t2ni yaratdik, va ularning farqi ekranga chop etildi.

14-misol: Soniyalarda vaqt davomiyligi

timedelta obyektidagi soniyalarning umumiy sonini total_seconds() metodi yordamida olishimiz mumkin.

example.py
from datetime import timedelta

t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
print("Total seconds =", t.total_seconds())

Natija

kod
Total seconds = 435633.233423

Python datetime'ni formatlash

Sana va vaqtning ifodalanish usuli turli joylar, tashkilotlarda farq qilishi mumkin. AQShda mm/dd/yyyy formatidan foydalanish odatiy hol, Buyuk Britaniyada esa dd/mm/yyyy ko'proq ishlatiladi.

Buni boshqarish uchun Pythonda strftime() va strptime() metodlari bor.

Python strftime() metodi

strftime() metodi date, datetime va time klasslari ostida aniqlangan. Metod berilgan sana, datetime yoki vaqt obyektidan formatlangan satr yaratadi.

Keling, bir misolni ko'ramiz.

example.py
from datetime import datetime

# joriy sana va vaqt
now = datetime.now()

t = now.strftime("%H:%M:%S")
print("Time:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S formati
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S formati
print("s2:", s2)

Natija

kod
time: 04:34:52
s1: 12/26/2018, 04:34:52
s2: 26/12/2018, 04:34:52

Bu yerda, %Y, %m, %d, %H va h.k. — format kodlari. strftime() metodi bir yoki bir nechta format kodini oladi va shu asosda formatlangan satrni qaytaradi.

Yuqoridagi misolda, t, s1 va s2 — satrlar.

  • %Y - yil [0001,..., 2018, 2019,..., 9999]
  • %m - oy [01, 02, ..., 11, 12]
  • %d - kun [01, 02, ..., 30, 31]
  • %H - soat [00, 01, ..., 22, 23]
  • %M - daqiqa [00, 01, ..., 58, 59]
  • %S - soniya [00, 01, ..., 58, 59]

strftime() va format kodlari haqida ko'proq bilish uchun, tashrif buyuring: Python strftime().

Python strptime() metodi

strptime() metodi berilgan satrdan (sana va vaqtni ifodalovchi) datetime obyektini yaratadi. Masalan,

example.py
from datetime import datetime

date_string = "25 December, 2022"
print("date_string =", date_string)

# date obyektini yaratish uchun strptime() dan foydalanish
date_object = datetime.strptime(date_string, "%d %B, %Y")

print("date_object =", date_object)

Natija

kod
date_string = 25 december, 2022
date_object = 2018-06-21 00:00:00

strptime() metodi ikkita argumentni oladi:

  • sana va vaqtni ifodalovchi satr
  • birinchi argumentga mos keluvchi format kodi

Aytgancha, %d, %B va %Y format kodlari mos ravishda kun, oy (to'liq nomi) va yil uchun ishlatiladi.

strptime() va format kodlari haqida ko'proq bilish uchun, tashrif buyuring: Python strptime().

Pythonda vaqt mintaqasini boshqarish

Aytaylik, biz loyiha ustida ishlayapmiz va sana va vaqtni ularning vaqt mintaqasiga asoslanib ko'rsatishimiz kerak.

Vaqt mintaqasini o'zingiz boshqarishga urinish o'rniga, biz uchinchi tomon pytz modulidan foydalanishni tavsiya qilamiz.

example.py
from datetime import datetime
import pytz

local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))

tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))

Natija

kod
Local: 12/27/2022, 09:40:19
NY: 12/27/2022, 04:40:19
London: 12/27/2022, 09:40:19

Bu yerda, datetime_NY va datetime_London — o'zlarining tegishli vaqt mintaqasidagi joriy sana va vaqtni o'z ichiga olgan datetime obyektlari.

Ko'proq o'qing: Python get current time, How to get current date and time in Python, Python time module

QBilimingizni sinab ko'ring
1 / 3

1. datetime.datetime.now() nimani qaytaradi?