Pythoni standardraamatukogu datetime saab kasutada kuupäevade ja kellaaegade (kuupäevade, kellaaegade ja kellaaegade) töötlemiseks. Meetodeid strftime() ja strptime(), mis teisendavad kuupäevad ja kellaajad stringideks ja stringidest, saab kasutada kuupäevade ja kellaaegade manipuleerimiseks erinevates formaatides.
Samuti võib see teha selliseid operatsioone nagu lahutamine ja liitmine. Näiteks saate hõlpsasti arvutada ja saada kuupäeva 10 päeva tagasi või 3 nädala pärast või aega 50 minuti pärast.
Kõigepealt kirjeldame järgmisi datetime-moodulis kättesaadavaid objektiklasse.
datetime.datetime
:Kuupäev ja kellaaeg (kuupäev ja kellaaeg)datetime.date
:Kuupäevdatetime.time
:Aegdatetime.timedelta
:Aegade vahe ja kulunud aeg
Samuti selgitatakse meetodeid strftime() ja strptime(), mis teisendavad date\time ja stringi teineteiseks.
datetime
objektdatetime.now()
:Tänane kuupäev, praegune kellaaegdatetime
Objekti konstruktor- Kuupäeva objekti konverteerimine kuupäeva objektiks
date
objektdate.today()
:Tänane kuupäev- Kuupäeva objekti konstruktor
time
objekt- Konstruktor ajaobjekti jaoks
timedelta
objekt- Lahutada datetime- ja date-objektid, et luua timedelta-objekte.
- Konstruktor timedelta objekti jaoks
- Lahutamine ja liitmine timedelta objektide abil
strftime()
:Konverteerimine kuupäevast ja kellaajast stringiksstrptime()
:Konverteerimine stringist kuupäevaks ja kellaajaks
Standardraamatukogus on ka kalendermoodul, mis genereerib kalendreid tavalises teksti- või HTML-vormingus.
datetime objekt
Datetime-objekt on objekt, mis sisaldab nii kuupäeva (aasta, kuu, päev) kui ka aja (tund, minut, sekund, mikrosekund) teavet. Nendele andmetele pääseb ligi järgmiste atribuutidega.
year
month
day
hour
minute
second
microsecond
datetime.now(): Tänane kuupäev, praegune kellaaeg
datetime.now() annab sulle datetime-objekti tänase kuupäeva (praeguse kuupäeva) ja praeguse ajaga.
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
Konstruktor datetime objekti jaoks
Samuti on võimalik genereerida datetime-objekte suvaliste kuupäevade ja kellaaegade jaoks.
Datetime-objekti konstruktor on järgmine.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Järgmised väärtused on nõutavad ja teised võib ära jätta. Kui need jäetakse välja, on vaikeväärtus 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
Kuupäeva objekti konverteerimine kuupäeva objektiks
Dateetime-objekti saab konverteerida date-objektiks meetodi date() abil, nagu on kirjeldatud allpool.
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'>
kuupäeva objekt
Kuupäeva objekt on objekt, mis sisaldab teavet kuupäeva kohta (aasta, kuu, päev). Sellele on võimalik ligi pääseda atribuutide aasta, kuu ja päev järgi.
date.today(): Tänane kuupäev
Praeguse kuupäeva (tänase kuupäeva) kuupäevaobjekti saab date.today() abil.
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Kuupäeva objekti konstruktor
Kuupäeva objekti konstruktor on järgmine
date(year, month, day)
Kõik on nõutavad ja neid ei saa välja jätta.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
ajaobjekt
Ajaobjekt on objekt, mis sisaldab teavet aja kohta (tunnid, minutid, sekundid ja mikrosekundid). Sellele saab ligi, kasutades atribuute tund, minut, sekund ja mikrosekund.
Konstruktor ajaobjekti jaoks
Ajaobjekti konstruktor on järgmine.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Kõik need on valikulised ja kui need jäetakse välja, määratakse neile väärtus 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
timedelta objekt
Objekt timedelta on objekt, mis kujutab kahe kuupäeva ja kellaaja vahelist ajavahet või möödunud aega. See sisaldab teavet päevades, sekundites ja mikrosekundites ning sellele saab juurdepääsu atribuutide days, seconds ja microseconds abil. Samuti on võimalik saada sekundite koguarvu, kasutades meetodit total_seconds().
Subtract datetime ja date objektid, et luua timedelta objekt.
Datetime objektide lahutamisel üksteisest saadakse timedelta objekt.
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
Kuupäeva objektide lahutamine üksteisest annab samamoodi timedelta objekti.
Konstruktor timedelta objekti jaoks
Timedelta objekti konstruktor on järgmine
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Kõik need on valikulised ja kui need jäetakse välja, määratakse neile väärtus 0.
Pange tähele, et timedelta objekt sisaldab ainult järgmist teavet.
- mitu päeva:
days
- sekundite arv:
seconds
- mikrosekundite arv:
microseconds
Näiteks järgmised kaks on võrdsed
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Lahutamine ja liitmine timedelta objektide abil
Timedelta objekti saab kasutada koos datetime ja date objektidega, et teha selliseid operatsioone nagu lahutamine ja liitmine. Näiteks saab hõlpsasti arvutada ja saada kuupäeva nädal tagasi või 10 päeva pärast või aega 50 minutit pärast praegust.
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
Seda saab kasutada ka konkreetse kuupäevani jäänud päevade arvu arvutamiseks.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime(): Konverteerimine kuupäevast ja kellaajast stringiks
Datetime- ja date-objektide meetodit strftime() saab kasutada kuupäevade ja kellaaegade (kuupäev ja kellaaeg) teisendamiseks mis tahes formaadis stringiks.
vormingu kood
Saadaolevate vormindamiskoodide kohta vt allpool olevat ametlikku dokumentatsiooni.
Peamised vormindamiskoodid on loetletud allpool.
%d
:Kuu päev kümnendmärgiga ja nulliga täidetud.%m
:Kuu kümnendmurdes ja nulliga täidetud.%y
:Aasta kaks viimast numbrit nulliga täidetud kümnendmurdes.%Y
:Nelja numbriga aastaarv kümnendmurdes ja nulliga täidetud.%H
:Väljendatuna kümnendmurdes ja nulliga (24-tunnine märkimine).%I
:Väljendatuna kümnendmurdes ja nulliga (12-tunnine märkimine).%M
:Nulliga täidetud kümnendmurde puhul.%S
:Sekundid kümnendmurdes nulliga täidetud.%f
:Mikrosekundid (6-kohaline) kümnendmärgiga, täis 0.%A
:Paikuse nädalapäeva nimi%a
:Paikuse päeva nimi (lühendatud kujul)%B
:Kohaliku kuu nimi%b
:Kohaliku kuu nimi (lühendatud kujul)%j
:Aasta päev kümnendmurdes nulliga.%U
:aasta nädala number kümnendmärgiga nulliga (nädal algab pühapäeval)%W
:aasta nädala number kümnendmärgiga nulliga (nädal algab esmaspäeval)
Järgmised päevade ja kuude nimede vormindamise koodid on võimalik saada erinevates stringides sõltuvalt asukohast.
%A
%a
%B
%b
Samuti on olemas spetsiaalne meetod ISO 8601 formaadis stringide jaoks.
Näidiskood
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
Kui soovite saada stringi asemel arvu, teisendage see lihtsalt täisarvuks funktsiooniga int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Koos timedelta objektiga on lihtne luua näiteks kahenädalaste kuupäevade loetelu mis tahes formaadis.
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
Loetelu mõistmise märkimisviisi kasutamine on targem.
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']
- Seotud artiklid:Pythoni loendi arusaadavuse notatsiooni kasutamine
strptime(): Konverteerimine stringist kuupäevaks ja kellaajaks
datetime strptime() saab kasutada kuupäevast või kellaaja stringist datetime-objekti loomiseks. Tuleb määrata algsele stringile vastav vormindusstring.
Samuti on olemas spetsiaalne meetod ISO 8601 stringide jaoks (Python 3.7 või uuem).
Näidiskood
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'>
Kasutades saadud datetime-objektile meetodit strftime(), saab kuupäeva ja kellaaega esitada algsest stringist erinevas formaadis.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Kui te teisendate selle datetime-objektiks, saate teha operatsioone ka timedelta-objektidega, nii et saate näiteks genereerida 10 päeva taguse kuupäeva stringi samas formaadis.
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