Hægt er að nota staðlaða dagsetningu bókasafns Python til að vinna úr dagsetningum og tíma (dagsetningar, tíma og tíma). Aðferðirnar strftime() og strptime(), sem umbreyta dagsetningum og tíma í og úr strengjum, er hægt að nota til að vinna með dagsetningar og tíma á ýmsum sniðum.
Það getur einnig framkvæmt aðgerðir eins og frádrátt og samlagningu. Til dæmis geturðu auðveldlega reiknað út og fengið dagsetninguna fyrir 10 dögum eða eftir 3 vikur, eða tímann eftir 50 mínútur.
Í fyrsta lagi munum við lýsa eftirfarandi flokkum af hlutum sem eru tiltækir í datetime einingunni.
datetime.datetime
:Dagsetning og tími (dagsetning og tími)datetime.date
:Dagsetningdatetime.time
:Tímidatetime.timedelta
:Tímamunur og liðinn tími
Aðferðirnar strftime() og strptime(), sem umbreyta dagsetningu/tíma og streng í hvert annað, eru einnig útskýrðar.
datetime
mótmæladatetime.now()
:Dagsetning dagsins, núverandi tímidatetime
Hlutasmiður- Umbreytir datetime hlut í dagsetningarhlut
date
mótmæladate.today()
:Dagsetning dagsins- Smiður fyrir dagsetningarhlutinn
time
mótmæla- Smiður fyrir tímahlutinn
timedelta
mótmæla- Dragðu frá datetime og dagsetningarhluti til að búa til timedelta hluti.
- Smiður fyrir timedelta hlutinn
- Frádráttur og samlagning með tímadeltuhlutum
strftime()
:Umbreyting frá dagsetningu og tíma í strengstrptime()
:Umbreyting úr streng í dagsetningu og tíma
Einnig innifalið í venjulegu bókasafninu er dagatalareiningin, sem býr til dagatöl í venjulegum texta eða HTML sniði.
datetime hlutur
Datetime hlutur er hlutur sem hefur bæði upplýsingar um dagsetningu (ár, mánuður, dagur) og tíma (klukkustund, mínúta, sekúnda, míkrósekúnda). Þú getur nálgast þessar upplýsingar með eftirfarandi eiginleikum.
year
month
day
hour
minute
second
microsecond
datetime.now():Dagsetning dagsins, núverandi tími
datetime.now() mun gefa þér datetime hlut með dagsetningu dagsins (núverandi dagsetningu) og núverandi tíma.
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
Smiður fyrir datetime hlut
Það er líka hægt að búa til datetime hluti fyrir handahófskenndar dagsetningar og tíma.
Smiðurinn fyrir datetime hlutinn er sem hér segir.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Eftirfarandi gildi eru nauðsynleg og öðrum má sleppa. Ef því er sleppt er sjálfgefið gildi 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
Umbreytir datetime hlut í dagsetningarhlut
Datetime hlut er hægt að breyta í dagsetningarhlut með date() aðferðinni, eins og lýst er næst.
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'>
dagsetningarhlutur
Dagsetningarhlutur er hlutur sem inniheldur upplýsingar um dagsetningu (ár, mánuður, dagur). Það er hægt að nálgast það með eigindunum ár, mánuður og dagur.
date.today():Dagsetning dagsins
Dagsetningarhlut núverandi dagsetningar (dagsetning dagsins) er hægt að fá með 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
Smiður fyrir dagsetningarhlutinn
Smiðurinn fyrir dagsetningarhlutinn er sem hér segir
date(year, month, day)
Öll eru nauðsynleg og ekki er hægt að sleppa því.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
tímahlutur
Tímahluturinn er hlutur sem inniheldur upplýsingar um tíma (klst., mínútur, sekúndur og míkrósekúndur). Það er hægt að nálgast það með því að nota eiginleikana klukkustund, mínútu, sekúndu og míkrósekúndu.
Smiður fyrir tímahlutinn
Smiður tímahlutarins er sem hér segir.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Öll þau eru valkvæð og ef þeim er sleppt eru þau stillt á 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 hlutur
Timedelta hluturinn er hlutur sem táknar tímamun á milli tveggja dagsetninga og tíma, eða liðinn tíma. Það hefur upplýsingar í dögum, sekúndum og míkrósekúndum og hægt er að nálgast þær með eigindunum dagar, sekúndur og míkrósekúndur. Það er líka hægt að fá heildarfjölda sekúndna með því að nota total_seconds() aðferðina.
Dragðu frá datetime og dagsetningarhluti til að búa til timedelta hlut.
Að draga datetime hluti frá hver öðrum gefur tímadeltu hlut.
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
Frádráttur dagsetningarhluta hver frá öðrum gefur á sama hátt tímadeltuhlut.
Smiður fyrir timedelta hlutinn
Smiður tímadeltuhlutarins er sem hér segir
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Öll þau eru valkvæð og ef þeim er sleppt eru þau stillt á 0.
Athugaðu að timedelta hluturinn geymir aðeins eftirfarandi upplýsingar.
- fjölda daga:
days
- fjölda sekúndna:
seconds
- míkrósekúndnafjöldi:
microseconds
Til dæmis eru eftirfarandi tveir jafnir
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Frádráttur og samlagning með tímadeltuhlutum
Timedelta hlutinn er hægt að nota með datetime og datetime hlutunum til að framkvæma aðgerðir eins og frádrátt og samlagningu. Til dæmis geturðu auðveldlega reiknað út og fengið dagsetninguna fyrir viku síðan eða eftir 10 daga, eða tímann eftir 50 mínútur.
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
Það er einnig hægt að nota til að reikna út fjölda daga fram að tiltekinni dagsetningu.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():Umbreyting frá dagsetningu og tíma í streng
Strftime() aðferðin fyrir datetime og dagsetningarhluti er hægt að nota til að umbreyta dagsetningu og tíma (dagsetningu og tíma) upplýsingum í streng á hvaða sniði sem er.
sniðkóða
Sjá opinberu skjölin hér að neðan fyrir tiltæka sniðkóða.
Helstu sniðkóðarnir eru taldir upp hér að neðan.
%d
:Dagur mánaðarins í aukastaf með núlli fyllt út.%m
:Mánuður í aukastaf með núlli fyllt út.%y
:Síðustu tveir tölustafir ársins í núllútfylltum aukastaf.%Y
:Fjórir tölustafir ársins í aukastaf með núlli fyllt út.%H
:Þegar það er gefið upp með tugabroti með núlli fyllt (24-klukkustunda merki)%I
:Þegar það er gefið upp með tugabroti með núlli fyllt (12 klst.%M
:Fyrir aukastaf með núlli fyllt.%S
:Sekúndur í aukastaf með núlli fyllt.%f
:Míkrósekúndur (6 tölustafir) í aukastaf með 0 fyllt út.%A
:Heiti vikudags svæðisins%a
:Heiti dagsins fyrir svæði (skammstafað form)%B
:Heimilisnafn mánaðar%b
:Heimilisnafn mánaðar (skammstafað form)%j
:Dagur ársins í aukastaf með núllfyllingu.%U
:Vikunúmer ársins í aukastaf með núllfyllingu (vikan hefst á sunnudag)%W
:Vikunúmer ársins í aukastaf með núllfyllingu (vikan hefst á mánudegi)
Eftirfarandi sniðkóða fyrir dag- og mánaðarnöfn er hægt að fá í mismunandi strengjum eftir staðsetningu.
%A
%a
%B
%b
Það er líka sérstök aðferð fyrir ISO 8601 sniðstrengi.
Dæmi um kóða
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
Ef þú vilt fá tölu í stað strengs skaltu bara breyta henni í heiltölu með int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
Í samsetningu með timedelta hlutnum er auðvelt að búa til, til dæmis, lista yfir tveggja vikna dagsetningar á hvaða sniði sem er.
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
Það er snjallast að nota listaskilning.
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']
- Tengdar greinar:Notkun Python listaskilninga
strptime():Umbreyting úr streng í dagsetningu og tíma
datetime strptime() er hægt að nota til að búa til datetime hlut úr dagsetningar- eða tímastreng. Nauðsynlegt er að tilgreina sniðstrenginn sem samsvarar upprunalega strengnum.
Það er líka sérstök aðferð fyrir ISO 8601 strengi (Python 3.7 eða nýrri).
Dæmi um kóða
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'>
Með því að nota strftime() aðferðina á sótta datetime hlutnum geturðu táknað dagsetningu og tíma á öðru sniði en upprunalega strenginn.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Ef þú breytir því í datetime hlut geturðu líka framkvæmt aðgerðir með timedelta hlutum, svo þú getur til dæmis búið til streng af dagsetningu fyrir 10 dögum síðan á sama sniði.
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