Python-un standart kitabxana tarix vaxtı tarixləri və vaxtları (tarixlər, vaxtlar və vaxtlar) emal etmək üçün istifadə edilə bilər. Tarixləri və vaxtı sətirlərə və sətirlərdən çevirən strftime() və strptime() üsulları müxtəlif formatlarda tarix və vaxtı manipulyasiya etmək üçün istifadə edilə bilər.
O, çıxma və toplama kimi əməliyyatları da yerinə yetirə bilər. Məsələn, 10 gün əvvəl və ya indidən 3 həftə sonra tarixi və ya indidən 50 dəqiqə sonrakı vaxtı asanlıqla hesablayıb əldə edə bilərsiniz.
Birincisi, biz datetime modulunda mövcud olan aşağıdakı obyekt siniflərini təsvir edəcəyik.
datetime.datetime
:Tarix və vaxt (tarix və vaxt)datetime.date
:Tarixdatetime.time
:Vaxtdatetime.timedelta
:Vaxt fərqi və keçən vaxt
Tarix/saat və sətri bir-birinə çevirən strftime() və strptime() üsulları da izah edilir.
datetime
obyektdatetime.now()
:Bu günün tarixi, indiki vaxtdatetime
Obyekt Konstruktoru- Datetime obyektinin tarix obyektinə çevrilməsi
date
obyektdate.today()
:Bugünkü tarix- Tarix obyekti üçün konstruktor
time
obyekt- Zaman obyekti üçün konstruktor
timedelta
obyekt- timedelta obyektləri yaratmaq üçün datetime və tarix obyektlərini çıxarın.
- Timedelta obyekti üçün konstruktor
- Timedelta obyektlərindən istifadə edərək çıxma və toplama
strftime()
:Tarix və vaxtdan sətirə çevrilməstrptime()
:Sətirdən tarixə və vaxta çevrilmə
Standart kitabxanaya düz mətn və ya HTML formatında təqvimlər yaradan təqvim modulu da daxildir.
datetime obyekti
Datetime obyekti həm tarix (il, ay, gün), həm də vaxt (saat, dəqiqə, saniyə, mikrosaniyə) məlumatlarına malik olan obyektdir. Siz bu məlumatlara aşağıdakı atributlarla daxil ola bilərsiniz.
year
month
day
hour
minute
second
microsecond
datetime.now():Bu günün tarixi, indiki vaxt
datetime.now() sizə bugünkü tarix (cari tarix) və cari vaxt ilə datetime obyekti verəcək.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
Datetime obyekti üçün konstruktor
İxtiyari tarixlər və vaxtlar üçün datetime obyektləri yaratmaq da mümkündür.
Datetime obyekti üçün konstruktor aşağıdakı kimidir.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Aşağıdakı dəyərlər tələb olunur və digərləri buraxıla bilər. Əgər buraxılıbsa, standart dəyər 0-dır.
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
Datetime obyektinin tarix obyektinə çevrilməsi
Datetime obyekti aşağıda təsvir olunduğu kimi date() metodu ilə tarix obyektinə çevrilə bilər.
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
tarix obyekti
Tarix obyekti tarix (il, ay, gün) haqqında məlumatı ehtiva edən obyektdir. Ona il, ay və gün atributları ilə daxil olmaq olar.
date.today():Bugünkü tarix
Cari tarixin tarix obyekti (bugünkü tarix) date.today() ilə əldə edilə bilər.
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Tarix obyekti üçün konstruktor
Tarix obyekti üçün konstruktor aşağıdakı kimidir
date(year, month, day)
Hamısı tələb olunur və buraxıla bilməz.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
zaman obyekti
Zaman obyekti zaman haqqında məlumatı (saat, dəqiqə, saniyə və mikrosaniyə) ehtiva edən obyektdir. Ona saat, dəqiqə, saniyə və mikrosaniyə atributlarından istifadə etməklə daxil olmaq olar.
Zaman obyekti üçün konstruktor
Zaman obyektinin konstruktoru aşağıdakı kimidir.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Onların hamısı isteğe bağlıdır və buraxılıbsa, 0-a təyin edilir.
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
timedelta obyekti
Timedelta obyekti iki tarix və vaxt arasındakı vaxt fərqini və ya keçən vaxtı təmsil edən obyektdir. O, günlər, saniyələr və mikrosaniyələrlə bağlı məlumatlara malikdir və günlər, saniyələr və mikrosaniyələr atributları ilə əldə edilə bilər. Total_seconds() metodundan istifadə edərək ümumi saniyə sayını əldə etmək də mümkündür.
timedelta obyekti yaratmaq üçün datetime və tarix obyektlərini çıxarın.
Datetime obyektlərinin bir-birindən çıxarılması timedelta obyekti verir.
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
Tarix obyektlərinin bir-birindən çıxarılması oxşar şəkildə timedelta obyekti verir.
Timedelta obyekti üçün konstruktor
Timedelta obyektinin konstruktoru aşağıdakı kimidir
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Onların hamısı isteğe bağlıdır və buraxılıbsa, 0-a təyin edilir.
Qeyd edək ki, timedelta obyekti yalnız aşağıdakı məlumatları saxlayır.
- bir sıra günlər:
days
- saniyə sayı:
seconds
- mikrosaniyə sayı:
microseconds
Məsələn, aşağıdakı ikisi bərabərdir
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Timedelta obyektlərindən istifadə edərək çıxma və toplama
Timedelta obyekti çıxma və toplama kimi əməliyyatları yerinə yetirmək üçün datetime və date obyektləri ilə birlikdə istifadə edilə bilər. Məsələn, bir həftə əvvəl və ya indidən 10 gün sonra tarixi və ya indidən 50 dəqiqə sonrakı vaxtı asanlıqla hesablayıb əldə edə bilərsiniz.
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
O, həmçinin müəyyən bir tarixə qədər olan günlərin sayını hesablamaq üçün istifadə edilə bilər.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Tarix və vaxtdan sətirə çevrilmə
Datetime və date obyektlərinin strftime() metodu tarix və vaxt (tarix və vaxt) məlumatını istənilən format formatında sətirə çevirmək üçün istifadə edilə bilər.
formatlaşdırma kodu
Mövcud formatlaşdırma kodları üçün aşağıdakı rəsmi sənədlərə baxın.
Əsas formatlaşdırma kodları aşağıda verilmişdir.
%d
:Sıfırla onluq qeyddə ayın günü.%m
:Sıfırla onluq qeyddə ay.%y
:Sıfırla doldurulmuş onluq qeydlərdə ilin son iki rəqəmi.%Y
:İlin dörd rəqəmi ondalıq işarə ilə doldurulur.%H
:Sıfır doldurulmuş onluq notasiya ilə ifadə edildikdə (24 saatlıq notation)%I
:Sıfırla doldurulmuş onluq işarə ilə ifadə edildikdə (12 saatlıq notation)%M
:Sıfır doldurulmuş onluq notasiyası üçün.%S
:Sıfır doldurulmuş onluq qeyddə saniyələr.%f
:Mikrosaniyələr (6 rəqəm) 0 ilə doldurulmuş onluq qeydlərdə.%A
:Yerli üçün həftənin gününün adı%a
:Yer üçün günün adı (qısaldılmış forma)%B
:Yerli ayın adı%b
:Yerli ayın adı (qısaldılmış forma)%j
:Sıfır doldurma ilə onluq qeyddə ilin günü.%U
:Sıfır doldurma ilə onluq qeyddə ilin həftə nömrəsi (həftə bazar günü başlayır)%W
:Sıfır doldurma ilə onluq qeyddə ilin həftə nömrəsi (həftə bazar ertəsi başlayır)
Gün və ay adları üçün aşağıdakı formatlaşdırma kodları yerli dildən asılı olaraq müxtəlif sətirlərdə əldə edilə bilər.
%A
%a
%B
%b
ISO 8601 format sətirləri üçün xüsusi üsul da mövcuddur.
Kod nümunəsi
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
Əgər sətir əvəzinə nömrə almaq istəyirsinizsə, sadəcə onu int() ilə tam ədədə çevirin.
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Timedelta obyekti ilə birlikdə, məsələn, istənilən formatda iki həftəlik tarixlərin siyahısını yaratmaq asandır.
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
Siyahının başa düşülməsi qeydindən istifadə daha ağıllıdır.
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- Əlaqədar Məqalələr:Python siyahısı başa düşmə notasiyasından istifadə
strptime():Sətirdən tarixə və vaxta çevrilmə
datetime strptime() tarix və ya vaxt sətirindən datetime obyekti yaratmaq üçün istifadə edilə bilər. Orijinal sətirə uyğun formatlaşdırma sətirini təyin etmək lazımdır.
ISO 8601 sətirləri üçün xüsusi metod da mövcuddur (Python 3.7 və ya daha sonra).
Kod nümunəsi
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
Alınan datetime obyektində strftime() metodundan istifadə etməklə siz tarix və vaxtı orijinal sətirdən fərqli formatda təqdim edə bilərsiniz.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Onu datetime obyektinə çevirsəniz, timedelta obyektləri ilə də əməliyyatlar həyata keçirə bilərsiniz, beləliklə, məsələn, eyni formatda 10 gün əvvəl tarixin sətirini yarada bilərsiniz.
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22