Tarehe ya kawaida ya maktaba ya Python inaweza kutumika kusindika tarehe na nyakati (tarehe, nyakati na nyakati). Mbinu strftime() na strptime(), ambazo hubadilisha tarehe na nyakati hadi na kutoka kwa mifuatano, zinaweza kutumika kudhibiti tarehe na nyakati katika miundo mbalimbali.
Inaweza pia kufanya shughuli kama vile kutoa na kuongeza. Kwa mfano, unaweza kuhesabu kwa urahisi na kupata tarehe siku 10 zilizopita au wiki 3 kutoka sasa, au wakati dakika 50 kutoka sasa.
Kwanza, tutaelezea madarasa yafuatayo ya vitu vinavyopatikana kwenye moduli ya tarehe.
datetime.datetime
:Tarehe na wakati (tarehe na wakati)datetime.date
:Tarehedatetime.time
:Wakatidatetime.timedelta
:Tofauti ya wakati na wakati uliopita
Njia za strftime() na strptime(), ambazo hubadilisha tarehe/saa na kamba kwenda kwa kila mmoja, pia zimeelezewa.
datetime
kitudatetime.now()
:Tarehe ya leo, wakati wa sasadatetime
Mjenzi wa Kitu- Kubadilisha kitu cha tarehe kuwa kitu cha tarehe
date
kitudate.today()
:Tarehe ya leo- Mjenzi wa kitu cha tarehe
time
kitu- Mjenzi wa kitu cha wakati
timedelta
kitu- Ondoa vitu vya tarehe na tarehe ili kuunda vitu vya timedelta.
- Mjenzi wa kitu cha timedelta
- Kutoa na kuongeza kwa kutumia vitu vya timedelta
strftime()
:Ubadilishaji kutoka tarehe na wakati hadi mfuatanostrptime()
:Uongofu kutoka kwa mfuatano hadi tarehe na wakati
Pia pamoja na katika maktaba ya kawaida ni moduli ya kalenda, ambayo hutoa kalenda katika maandishi wazi au umbizo la HTML.
kitu cha tarehe
Kitu cha tarehe ni kitu ambacho kina tarehe (mwaka, mwezi, siku) na wakati (saa, dakika, pili, microsecond). Unaweza kufikia maelezo hayo kwa sifa zifuatazo.
year
month
day
hour
minute
second
microsecond
datetime.now():Tarehe ya leo, wakati wa sasa
datetime.now() itakupa kitu cha tarehe na tarehe ya leo (tarehe ya sasa) na wakati wa sasa.
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
Mjenzi wa kitu cha wakati
Inawezekana pia kutoa vitu vya tarehe kwa tarehe na nyakati za kiholela.
Mjenzi wa kitu cha tarehe ni kama ifuatavyo.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Thamani zifuatazo zinahitajika na zingine zinaweza kuachwa. Ikiwa imeachwa, thamani chaguo-msingi ni 0.
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
Kubadilisha kitu cha tarehe kuwa kitu cha tarehe
Kitu cha tarehe kinaweza kubadilishwa kuwa kitu cha tarehe kwa njia ya tarehe(), kama ilivyoelezewa ijayo.
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'>
kitu cha tarehe
Kitu cha tarehe ni kitu ambacho kina habari kuhusu tarehe (mwaka, mwezi, siku). Inaweza kufikiwa na sifa mwaka, mwezi, na siku.
date.today():Tarehe ya leo
Kipengee cha tarehe cha tarehe ya sasa (tarehe ya leo) kinaweza kupatikana kwa date.today().
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Mjenzi wa kitu cha tarehe
Mjenzi wa kitu cha tarehe ni kama ifuatavyo
date(year, month, day)
Zote zinahitajika na haziwezi kuachwa.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
kitu cha wakati
Kitu cha wakati ni kitu ambacho kina habari kuhusu wakati (saa, dakika, sekunde, na sekunde ndogo). Inaweza kufikiwa kwa kutumia sifa saa, dakika, pili, na microsecond.
Mjenzi wa kitu cha wakati
Mjenzi wa kitu cha wakati ni kama ifuatavyo.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Zote ni za hiari, na zikiachwa, zimewekwa kuwa 0.
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
kitu cha timedelta
Kitu cha timedelta ni kitu kinachowakilisha tofauti ya wakati kati ya tarehe na nyakati mbili, au wakati uliopita. Ina taarifa katika siku, sekunde na sekunde ndogo, na inaweza kufikiwa na sifa siku, sekunde na sekunde ndogo. Inawezekana pia kupata jumla ya idadi ya sekunde kwa kutumia total_seconds() mbinu.
Ondoa vitu vya tarehe na tarehe ili kuunda kitu cha timedelta.
Kutoa vitu vya tarehe kutoka kwa kila mmoja hutoa kitu cha timedelta.
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
Utoaji wa vitu vya tarehe kutoka kwa kila mmoja vile vile hutoa kitu cha timedelta.
Mjenzi wa kitu cha timedelta
Mjenzi wa kitu cha timedelta ni kama ifuatavyo
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Zote ni za hiari, na zikiachwa, zimewekwa kuwa 0.
Kumbuka kuwa kitu cha timedelta kinashikilia tu habari ifuatayo.
- idadi ya siku:
days
- idadi ya sekunde:
seconds
- hesabu ya microsecond:
microseconds
Kwa mfano, mbili zifuatazo ni sawa
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Kutoa na kuongeza kwa kutumia vitu vya timedelta
Kitu cha timedelta kinaweza kutumika pamoja na vitu vya tarehe na tarehe kutekeleza shughuli kama vile kutoa na kuongeza. Kwa mfano, unaweza kuhesabu na kupata tarehe kwa urahisi wiki moja iliyopita au siku 10 kutoka sasa, au wakati dakika 50 kutoka sasa.
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
Inaweza pia kutumika kuhesabu idadi ya siku hadi tarehe maalum.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Ubadilishaji kutoka tarehe na wakati hadi mfuatano
Mbinu ya strftime() ya vitu vya tarehe na tarehe inaweza kutumika kubadilisha tarehe na saa (tarehe na saa) maelezo kuwa mfuatano katika umbizo la umbizo lolote.
msimbo wa umbizo
Tazama hati rasmi hapa chini kwa misimbo inayopatikana ya uumbizaji.
Misimbo kuu ya uumbizaji imeorodheshwa hapa chini.
%d
:Siku ya mwezi katika nukuu ya desimali na sifuri imejazwa.%m
:Mwezi katika nukuu ya desimali na sufuri imejazwa.%y
:Nambari mbili za mwisho za mwaka katika nukuu ya desimali iliyojazwa sufuri.%Y
:Nambari nne za mwaka katika nukuu ya desimali na sifuri kujazwa.%H
:Inapoonyeshwa kwa nukuu ya desimali na sifuri kujazwa (nukuu ya saa 24)%I
:Inapoonyeshwa kwa nukuu ya desimali na sifuri kujazwa (nukuu ya saa 12)%M
:Kwa nukuu ya desimali iliyojazwa sifuri.%S
:Sekunde katika nukuu ya desimali na sufuri imejaa.%f
:Sekunde ndogo (tarakimu 6) katika nukuu ya desimali na 0 kujazwa.%A
:Jina la siku ya juma kwa eneo%a
:Jina la siku ya eneo (fomu ya kifupi)%B
:Jina la mwezi wa eneo%b
:Jina la mwezi wa eneo (fomu fupi)%j
:Siku ya mwaka katika nukuu ya desimali na kujaza sifuri.%U
:Nambari ya wiki ya mwaka katika nukuu ya desimali yenye kujaza sifuri (wiki inaanza Jumapili)%W
:Nambari ya wiki ya mwaka katika nukuu ya desimali yenye kujaza sifuri (wiki inaanza Jumatatu)
Misimbo ifuatayo ya uumbizaji ya majina ya siku na mwezi inaweza kupatikana kwa mifuatano tofauti kulingana na eneo.
%A
%a
%B
%b
Pia kuna mbinu maalum ya mifuatano ya umbizo la ISO 8601.
Sampuli ya Kanuni
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
Ikiwa unataka kupata nambari badala ya kamba, ibadilishe kuwa nambari kamili na int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Kwa kuchanganya na kitu cha timedelta, ni rahisi kuunda, kwa mfano, orodha ya tarehe mbili za wiki katika muundo wowote.
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
Kutumia nukuu ya ufahamu wa orodha ni nadhifu zaidi.
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']
- Nakala Zinazohusiana:Kutumia nukuu ya ufahamu wa orodha ya Python
strptime():Uongofu kutoka kwa mfuatano hadi tarehe na wakati
datetime strptime() inaweza kutumika kuunda kitu cha tarehe kutoka kwa tarehe au mfuatano wa saa. Ni muhimu kutaja kamba ya umbizo inayolingana na mfuatano wa asili.
Pia kuna njia maalum ya nyuzi za ISO 8601 (Python 3.7 au baadaye).
Sampuli ya Kanuni
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'>
Kwa kutumia njia ya strftime() kwenye kitu cha wakati uliorejeshwa, unaweza kuwakilisha tarehe na wakati katika umbizo tofauti na mfuatano wa asili.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Ikiwa utaibadilisha kuwa kitu cha tarehe, unaweza pia kufanya shughuli na vitu vya timedelta, kwa mfano, unaweza kutoa safu ya tarehe siku 10 zilizopita katika umbizo sawa.
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