Pythons standardbibliotek datetime kan användas för att bearbeta datum och tider (datum, tider och tider). Metoderna strftime() och strptime(), som konverterar datum och tider till och från strängar, kan användas för att manipulera datum och tider i en mängd olika format.
Den kan också utföra operationer som subtraktion och addition. Du kan till exempel enkelt beräkna och få fram datumet för 10 dagar sedan eller om tre veckor, eller tiden om 50 minuter.
Först kommer vi att beskriva följande klasser av objekt som är tillgängliga i datetime-modulen.
datetime.datetime
:Datum och tid (datum och tid)datetime.date
:Datumdatetime.time
:Tiddatetime.timedelta
:Tidsskillnad och förfluten tid
Metoderna strftime() och strptime(), som omvandlar date\time och string till varandra, förklaras också.
datetime
objektdatetime.now()
:Dagens datum, aktuell tiddatetime
Objektkonstruktör- Konvertering av ett datumobjekt till ett datumobjekt
date
objektdate.today()
:Dagens datum- Konstruktör för datumobjektet
time
objekt- Konstruktör för tidsobjektet
timedelta
objekt- Subtrahera datumtids- och datumobjekt för att skapa timedelta-objekt.
- Konstruktör för timedelta-objektet
- Subtraktion och addition med hjälp av timedelta-objekt
strftime()
:Konvertering från datum och tid till strängstrptime()
:Konvertering från sträng till datum och tid
I standardbiblioteket ingår också kalendermodulen, som genererar kalendrar i vanlig text eller HTML-format.
datumtidsobjekt
Ett datetime-objekt är ett objekt som innehåller både datum (år, månad, dag) och tid (timme, minut, sekund, mikrosekund). Du kan komma åt denna information med följande attribut.
year
month
day
hour
minute
second
microsecond
datetime.now(): Dagens datum, aktuell tid
datetime.now() ger dig ett datetime-objekt med dagens datum (det aktuella datumet) och den aktuella tiden.
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
Konstruktör för datumobjekt
Det är också möjligt att generera datumtidsobjekt för godtyckliga datum och tider.
Konstruktören för datetime-objektet är följande.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Följande värden är obligatoriska och andra kan utelämnas. Om de utelämnas är standardvärdet 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
Konvertering av ett datumobjekt till ett datumobjekt
Ett datetime-objekt kan konverteras till ett datumobjekt med metoden date(), som beskrivs nedan.
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'>
objektet datum
Ett datumobjekt är ett objekt som innehåller information om ett datum (år, månad, dag). Det kan nås med attributen år, månad och dag.
date.today(): Dagens datum
Datumobjektet för det aktuella datumet (dagens datum) kan erhållas med 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
Konstruktör för datumobjektet
Konstruktören för datumobjektet är följande
date(year, month, day)
Alla är obligatoriska och kan inte utelämnas.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
tidsobjekt
Tidsobjektet är ett objekt som innehåller information om tid (timmar, minuter, sekunder och mikrosekunder). Det kan nås med hjälp av attributen timme, minut, sekund och mikrosekund.
Konstruktör för tidsobjektet
Konstruktören för tidsobjektet är följande.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Alla är valfria, och om de utelämnas sätts de till 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
Timedelta-objektet är ett objekt som representerar tidsskillnaden mellan två datum och tider, eller den förflutna tiden. Det har information i dagar, sekunder och mikrosekunder och kan nås med attributen dagar, sekunder och mikrosekunder. Det är också möjligt att få fram det totala antalet sekunder med hjälp av metoden total_seconds().
Subtrahera datetime- och date-objekten för att skapa ett timedelta-objekt.
Genom att subtrahera datumtidsobjekt från varandra erhålls ett 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
Subtraktion av datumobjekt från varandra ger på samma sätt ett timedeltaobjekt.
Konstruktör för timedelta-objektet
Konstruktören för timedelta-objektet är följande
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Alla är valfria, och om de utelämnas sätts de till 0.
Observera att timedelta-objektet endast innehåller följande information.
- ett antal dagar:
days
- antal sekunder:
seconds
- Räkning av mikrosekunder.:
microseconds
Till exempel är följande två likvärdiga
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Subtraktion och addition med hjälp av timedelta-objekt
Timedelta-objektet kan användas tillsammans med datetime- och date-objekten för att utföra operationer som subtraktion och addition. Du kan till exempel enkelt beräkna och få fram datumet för en vecka sedan eller om tio dagar, eller tiden om 50 minuter.
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
Den kan också användas för att beräkna antalet dagar till ett visst datum.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime(): Konvertering från datum och tid till sträng
Metoden strftime() för datetime- och date-objekt kan användas för att konvertera information om datum och tid (datum och tid) till en sträng i valfritt format.
kod för formatering
Se den officiella dokumentationen nedan för tillgängliga formateringskoder.
De viktigaste formateringskoderna anges nedan.
%d
:Månadens dag i decimalnotering med nollan fylld.%m
:Månad i decimalnotering med nollan fylld.%y
:Årets två sista siffror i nollfylld decimalnotering.%Y
:Årets fyra siffror i decimalform med nollan fylld.%H
:När det uttrycks i decimalnotering med nollan fylld (24-timmars-notering).%I
:När det uttrycks i decimalform med nollan fylld (12-timmarsform).%M
:För decimalnotering med fyllda nollor.%S
:Sekunder i decimalnotering med nollan fylld.%f
:Mikrosekunder (6 siffror) i decimalnotering med 0 fyllt.%A
:Namnet på veckodagen för den aktuella platsen.%a
:Dagens namn i området (förkortad form)%B
:Namn på den lokala månaden%b
:Namn på lokal månad (förkortad form)%j
:Årets dag i decimalnotering med nollfyllning.%U
:Årets veckonummer i decimalnotering med nollfyllning (veckan börjar på söndag).%W
:Årets veckonummer i decimalnotering med nollfyllning (veckan börjar på måndag).
Följande formateringskoder för dag- och månadsnamn kan erhållas i olika strängar beroende på språket.
%A
%a
%B
%b
Det finns också en särskild metod för strängar i ISO 8601-format.
Provkod
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
Om du vill få fram ett tal i stället för en sträng konverterar du det till ett heltal med int().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
I kombination med timedelta-objektet är det enkelt att till exempel skapa en lista med tvåveckorsdatum i valfritt format.
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
Det är smartare att använda listförståelsen.
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']
- Relaterade artiklar:Användning av Pythons listförståelse notation
strptime(): Konvertering från sträng till datum och tid
datetime strptime() kan användas för att skapa ett datetime-objekt från en datum- eller tidssträng. Det är nödvändigt att ange den formateringssträng som motsvarar den ursprungliga strängen.
Det finns också en särskild metod för ISO 8601-strängar (Python 3.7 eller senare).
Provkod
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'>
Genom att använda metoden strftime() på det hämtade datetime-objektet kan du representera datum och tid i ett annat format än den ursprungliga strängen.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Om du konverterar det till ett datumobjekt kan du också utföra operationer med timedelta-objekt, så att du till exempel kan generera en sträng med ett datum för 10 dagar sedan i samma format.
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