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
import datetime
# joriy sana va vaqtni olish
now = datetime.datetime.now()
print(now)
Natija
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
import datetime
# joriy sanani olish
current_date = datetime.date.today()
print(current_date)
Natija
2022-12-27
Yuqoridagi misolda, biz joriy lokal sanani o'z ichiga olgan datetime obyektini olish uchun date klassida aniqlangan today() metodidan foydalandik.
Modulning barcha atributlarini o'z ichiga olgan ro'yxatni olish uchun dir() funksiyasidan foydalanishimiz mumkin.
import datetime
print(dir(datetime))
Natija
['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.Pythonda, biz date klassidan date obyektlarini yaratishimiz mumkin. date obyekti sanani (yil, oy va kun) ifodalaydi.
3-misol: Sanani ifodalovchi date obyekti
import datetime
d = datetime.date(2022, 12, 25)
print(d)
Natija
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,
from datetime import date
d = date(2022, 12, 25)
print(d)
Natija
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,
from datetime import date
# joriy sanani olish uchun today()
todays_date = date.today()
print("Today's date =", todays_date)
Natija
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.
from datetime import date
timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)
Natija
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,
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
Current year: 2022
Current month: 12
Current day: 27
time klassidan yaratilgan time obyekti lokal vaqtni ifodalaydi.
7-misol: Vaqtni ifodalovchi time obyekti
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
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,
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
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 modulida ham date, ham time obyektlaridan ma'lumotni o'z ichiga olishi mumkin bo'lgan datetime nomli klass bor.
9-misol: Python datetime obyekti
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
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
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
year = 202
month = 12
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238
timedelta obyekti ikkita sana yoki vaqt orasidagi farqni ifodalaydi. Masalan,
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
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
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
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.
from datetime import timedelta
t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
print("Total seconds =", t.total_seconds())
Natija
Total seconds = 435633.233423
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.
strftime() metodi date, datetime va time klasslari ostida aniqlangan. Metod berilgan sana, datetime yoki vaqt obyektidan formatlangan satr yaratadi.
Keling, bir misolni ko'ramiz.
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
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().
strptime() metodi berilgan satrdan (sana va vaqtni ifodalovchi) datetime obyektini yaratadi. Masalan,
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
date_string = 25 december, 2022
date_object = 2018-06-21 00:00:00
strptime() metodi ikkita argumentni oladi:
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().
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.
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
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