Python datetime (strftime, strptime) ilə tarixləri və vaxtları sətirlərə və sətirlərdən çevirmək

Biznes

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:Tarix
  • datetime.time:Vaxt
  • datetime.timedelta:Vaxt fərqi və keçən vaxt

Tarix/saat və sətri bir-birinə çevirən strftime() və strptime() üsulları da izah edilir.

  • datetimeobyekt
    • datetime.now():Bu günün tarixi, indiki vaxt
    • datetimeObyekt Konstruktoru
    • Datetime obyektinin tarix obyektinə çevrilməsi
  • dateobyekt
    • date.today():Bugünkü tarix
    • Tarix obyekti üçün konstruktor
  • timeobyekt
    • Zaman obyekti üçün konstruktor
  • timedeltaobyekt
    • 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']

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
Copied title and URL