Pythonova standardna knjižnica datetime se lahko uporablja za obdelavo datumov in časov (datumov, časov in časov). Metodi strftime() in strptime(), ki pretvarjata datume in čase v in iz nizov, se lahko uporabljata za obdelavo datumov in časov v različnih oblikah.
Izvaja lahko tudi operacije, kot sta odštevanje in seštevanje. Zlahka lahko na primer izračunate in dobite datum pred 10 dnevi ali čez 3 tedne ali čas čez 50 minut.
Najprej bomo opisali naslednje razrede objektov, ki so na voljo v modulu datetime.
datetime.datetime
:Datum in čas (datum in čas)datetime.date
:Datumdatetime.time
:Časdatetime.timedelta
:Časovna razlika in pretečeni čas
Razloženi sta tudi metodi strftime() in strptime(), ki pretvarjata date\time in string drug v drugega.
datetime
predmetdatetime.now()
:Današnji datum, trenutni časdatetime
Konstruktor objekta- Pretvarjanje objekta datetime v objekt date
date
predmetdate.today()
:Današnji datum- Konstruktor za objekt date
time
predmet- Konstruktor za objekt čas
timedelta
predmet- Z odštevanjem objektov datetime in date ustvarite objekte timedelta.
- Konstruktor za objekt timedelta
- Odštevanje in seštevanje z uporabo predmetov timedelta
strftime()
:Pretvorba datuma in časa v nizstrptime()
:Pretvorba iz niza v datum in čas
V standardno knjižnico je vključen tudi koledarski modul, ki ustvarja koledarje v obliki navadnega besedila ali HTML.
objekt datetime
Objekt datetime je objekt, ki vsebuje podatke o datumu (leto, mesec, dan) in času (ura, minuta, sekunda, mikrosekunda). Do teh informacij lahko dostopate z naslednjimi atributi.
year
month
day
hour
minute
second
microsecond
datetime.now(): Današnji datum, trenutni čas
datetime.now() vam bo dal objekt datetime z današnjim datumom (trenutni datum) in trenutnim časom.
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 za objekt datetime
Prav tako je mogoče ustvariti objekte datetime za poljubne datume in čase.
Konstruktor za objekt datetime je naslednji.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Naslednje vrednosti so obvezne, druge lahko izpustite. Če so izpuščene, je privzeta vrednost 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
Pretvarjanje objekta datetime v objekt date
Objekt datetime lahko pretvorite v objekt date z metodo date(), kot je opisano v nadaljevanju.
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'>
predmet datum
Objekt datum je objekt, ki vsebuje informacije o datumu (leto, mesec, dan). Do njega lahko dostopamo z atributi leto, mesec in dan.
date.today(): Današnji datum
Datumski objekt trenutnega datuma (današnji datum) lahko dobite s funkcijo 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
Konstruktor za objekt date
Konstruktor za objekt date je naslednji
date(year, month, day)
Vsi so obvezni in jih ni mogoče izpustiti.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
časovni objekt
Objekt čas je objekt, ki vsebuje informacije o času (ure, minute, sekunde in mikrosekunde). Do njega lahko dostopamo z atributi ura, minuta, sekunda in mikrosekunda.
Konstruktor za objekt čas
Konstruktor objekta time je naslednji.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Vsi so neobvezni, in če so izpuščeni, se nastavijo na 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
predmet timedelta
Objekt timedelta je objekt, ki predstavlja časovno razliko med dvema datumoma in časoma ali pretekli čas. Vsebuje podatke v dnevih, sekundah in mikrosekundah, do njih pa lahko dostopamo z atributi days, seconds in microseconds. Z metodo total_seconds() je mogoče dobiti tudi skupno število sekund.
Z odštevanjem objektov datetime in date ustvarite objekt timedelta.
Če med seboj odštejemo objekte datumov, dobimo objekt 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
Če odštejemo objekte datumov drug od drugega, dobimo objekt timedelta.
Konstruktor za objekt timedelta
Konstruktor objekta timedelta je naslednji
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Vsi so neobvezni, in če so izpuščeni, se nastavijo na 0.
Upoštevajte, da objekt timedelta vsebuje samo naslednje informacije.
- število dni:
days
- število sekund:
seconds
- štetje mikrosekund:
microseconds
Naslednja dva sta na primer enaka
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Odštevanje in seštevanje z uporabo predmetov timedelta
Objekt timedelta se lahko uporablja z objektoma datetime in date za izvajanje operacij, kot sta odštevanje in seštevanje. Tako lahko na primer preprosto izračunate in dobite datum pred enim tednom ali čez 10 dni ali čas čez 50 minut.
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
Uporabite ga lahko tudi za izračun števila dni do določenega datuma.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime(): Pretvorba datuma in časa v niz
Metoda strftime() objektov datetime in date se lahko uporablja za pretvorbo podatkov o datumu in času (datumu in uri) v niz v katerem koli formatu.
koda za oblikovanje
Za razpoložljive kode oblikovanja glejte uradno dokumentacijo spodaj.
Glavne kode za oblikovanje so navedene spodaj.
%d
:Dan v mesecu v decimalnem zapisu z izpolnjeno ničlo.%m
:Mesec v decimalnem zapisu z izpolnjeno ničlo.%y
:Zadnji dve številki leta v decimalnem zapisu z ničlo.%Y
:Štiri števke leta v decimalnem zapisu z zapolnjeno ničlo.%H
:Če je izražen v decimalnem zapisu z izpolnjeno ničlo (24-urni zapis)%I
:Če je izražen v decimalnem zapisu z izpolnjeno ničlo (12-urni zapis)%M
:Za decimalni zapis z zapolnjeno ničlo.%S
:Sekunde v decimalnem zapisu z zapolnjeno ničlo.%f
:Mikrosekunde (6 števk) v decimalnem zapisu z zapolnjeno 0.%A
:Ime dneva v tednu za krajevno območje%a
:Ime dneva v kraju (skrajšana oblika)%B
:Ime krajevnega meseca%b
:Ime krajevnega meseca (skrajšana oblika)%j
:Dan v letu v decimalnem zapisu z ničelnim polnilom.%U
:Številka tedna v letu v decimalnem zapisu z ničelnim polnilom (teden se začne v nedeljo)%W
:Številka tedna v letu v decimalnem zapisu z ničlo (teden se začne v ponedeljek)
Naslednje kode za oblikovanje imen dni in mesecev lahko dobite v različnih nizih, odvisno od lokalnega okolja.
%A
%a
%B
%b
Na voljo je tudi posebna metoda za nize v formatu ISO 8601.
Vzorčna koda
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
Če želite namesto niza dobiti število, ga pretvorite v celo število s funkcijo int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
V kombinaciji z objektom timedelta lahko preprosto ustvarite na primer seznam dvotedenskih datumov v poljubni obliki.
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
Uporaba zapisa za razumevanje seznama je pametnejša.
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']
- Povezani članki:Uporaba zapisa za razumevanje seznamov v Pythonu
strptime(): Pretvorba iz niza v datum in čas
datetime strptime() lahko uporabite za ustvarjanje objekta datetime iz datumskega ali časovnega niza. Določiti je treba oblikovni niz, ki ustreza izvirnemu nizu.
Na voljo je tudi posebna metoda za nize ISO 8601 (Python 3.7 ali novejši).
Vzorčna koda
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'>
Z uporabo metode strftime() na pridobljenem objektu datetime lahko predstavite datum in čas v drugačni obliki kot prvotni niz.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Če ga pretvorite v objekt datetime, lahko izvajate tudi operacije z objekti timedelta, tako da lahko na primer ustvarite niz datuma izpred 10 dni v enaki obliki.
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