Umbreytir dagsetningum og tímum í og ​​úr strengjum í Python datetime (strftime, strptime)

Viðskipti

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:Dagsetning
  • datetime.time:Tími
  • datetime.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.

  • datetimemótmæla
    • datetime.now():Dagsetning dagsins, núverandi tími
    • datetimeHlutasmiður
    • Umbreytir datetime hlut í dagsetningarhlut
  • datemótmæla
    • date.today():Dagsetning dagsins
    • Smiður fyrir dagsetningarhlutinn
  • timemótmæla
    • Smiður fyrir tímahlutinn
  • timedeltamó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 í streng
  • strptime():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']

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