Stai ricevendo la data odierna in AAAA-MM-GG in Python?


326

Sto usando:

str(datetime.datetime.today()).split()[0]

per restituire la data odierna nel YYYY-MM-DDformato.

C'è un modo meno grezzo per raggiungere questo obiettivo?


3
Cosa intendi con "greggio"?
Gombat,

4
forse questo? \ n now = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Gombat

3
@Gombat Quello che voglio dire è nella mia esperienza, di solito c'è un modo integrato per ottenere ciò che vogliamo in Python senza dover dividere, indicizzare, concat, unire ecc.
Pyderman

Risposte:


604

Puoi usare strftime :

from datetime import datetime

datetime.today().strftime('%Y-%m-%d')

Inoltre, per chiunque cerchi anche un'ora, minuti e secondi a zero, alla fine: (Commento di Gabriel Staples )

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')

c'è anche una forte probabilità che "% x" funzioni ... ma questo dipende dalle
impostazioni

19
Per chiunque cerchi anche un'ora, minuti e secondi a zero, alla fine:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples,

che ne dici di solo time.strftime("%Y-%m-%d")?
aderchox,

Per la data UTC:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro

Vale la pena notare che datequesto è disponibile così comedatetime
dummyDev

116

È possibile utilizzare datetime.date.today()e convertire l' datetime.dateoggetto risultante in una stringa:

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'

È possibile cambiare il separatore in /?
Stevoisiak,

3
@StevenVascellaro sarebbedate.today().strftime('%Y/%m/%d')
kmonsoor

2
@StevenVascellaro Cattiva idea. Il lettore assume normalmente il separatore .su "DMY", il separatore /su M/D/Ye il separatore -su Y-M-D. Sebbene non tutti seguano queste linee guida, aiuterebbe a leggere le date a livello internazionale purché non tutti siano passati a Y-M-D.
glglgl,

1
@glglgl Sto lavorando con un API che assume il formato di data americano m / d / y. Ho già cambiato l'ordine nella mia applicazione.
Stevoisiak,

1
@glglgl Sì, sto usando m / d / y
Stevoisiak il

35

Il datetime è semplicemente adorabile se ti piace ricordare codici divertenti. Non preferiresti la semplicità?

>>> import arrow
>>> arrow.now().format('YYYY-MM-DD')
'2017-02-17'

Questo modulo è abbastanza intelligente da capire cosa intendi .

Fallo e basta pip install arrow.

Addendum: In risposta a coloro che si esercitano su questa risposta, lasciatemi dire che la freccia rappresenta uno degli approcci alternativi per gestire le date in Python. Questo è principalmente ciò che intendevo suggerire.


17
per un'attività semplice come questa, perché usare un'altra libreria quando la libreria integrata può farlo semplicemente. Naturalmente, se l'utente ha bisogno di altre moltitudini di funzioni correlate a {time, date}, è logico introdurre una nuova libreria.
kmonsoor,

2
mi hai fatto ridere leggendo quella seconda riga di codice. com'è meglio di print(date.today())>> "2018-12-16" ?? lol e ottieni facilmente i valori int t.year,t.month,t.day+1>> (2018, 12, 17) dove t = date.today()e il fatto che le persone non devono chiamare la freccia verde per dire loro l'ora. oddio questo è troppo codice da ricordare ...
Pozza

1
@Puddle: divertente.
Bill Bell,

@kmonsoor Quanto è import datetimediverso da import arrow? Sicuramente uno è integrato, ma se arrowfornisce un formato più conveniente, allora perché non utilizzarlo?
information_interchange

1
@information_interchange hai già risposto alla tua domanda. Integrato vs no. Se qualcuno ha bisogno di quelle cose extra, certo, perché no arrow? Ma, per molti progetti semplici, è semplicemente superfluo. Inoltre, in molti progetti interni all'azienda, i ppl devono ottenere l'approvazione per l'inclusione di nuove librerie.
kmonsoor,

30

Uso sempre la isoformat()funzione per questo.

from datetime import date    
today = date.today().isoformat()
print(today) # '2018-12-05'

Nota che questo funziona anche su oggetti datetime se hai bisogno anche dell'ora in formato standard.

from datetime import datetime
now = datetime.today().isoformat()
print(now) # '2018-12-05T11:15:55.126382'

15

Altre risposte suggeriscono l'uso di Python datetime.datetime, ma come diceva @Bill Bell, ci sono altre librerie che offrono datetimeinterfacce più semplici come servizio o come parte di un più ampio ecosistema di API. Ecco due di queste librerie che rendono datetimesmolto semplice lavorare con .

PANDAS

Puoi usare pd.to_datetimedalla biblioteca dei panda . Qui ci sono varie opzioni, a seconda di cosa vuoi restituire.

import pandas as pd

pd.to_datetime('today')  # pd.to_datetime('now')
# Timestamp('2019-03-27 00:00:10.958567')

Come oggetto datetime python ,

pd.to_datetime('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 50, 42, 587629)

Come una stringa di data formattata,

pd.to_datetime('today').isoformat()
# '2019-04-18T04:03:32.493337'

# Or, `strftime` for custom formats.
pd.to_datetime('today').strftime('%Y-%m-%d')
# '2019-03-27'

Per ottenere solo la data dal timestamp, chiama Timestamp.date.

pd.to_datetime('today').date()
# datetime.date(2019, 3, 27)

A parte to_datetime, puoi istanziare direttamente un Timestampoggetto usando,

pd.Timestamp('today')  # pd.Timestamp('now')
# Timestamp('2019-04-18 03:43:33.233093')

pd.Timestamp('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 53, 46, 220068)

Se vuoi rendere consapevole il tuo fuso orario di Timestamp, passa un fuso orario tzall'argomento.

pd.Timestamp('now', tz='America/Los_Angeles')
# Timestamp('2019-04-18 03:59:02.647819-0700', tz='America/Los_Angeles')

PENDOLO

Se lavori con il pendolo , ci sono alcune scelte interessanti. È possibile ottenere il timestamp corrente utilizzando now()o la data di oggi utilizzando today().

import pendulum 

pendulum.now()
# DateTime(2019, 3, 27, 0, 2, 41, 452264, tzinfo=Timezone('America/Los_Angeles'))

pendulum.today()
# DateTime(2019, 3, 27, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Inoltre, è anche possibile ottenere tomorrow()o yesterday()'s data direttamente senza dover fare alcuna aritmetica timedelta aggiuntivo.

pendulum.yesterday()
# DateTime(2019, 3, 26, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

pendulum.tomorrow()
# DateTime(2019, 3, 28, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Sono disponibili varie opzioni di formattazione.

pendulum.now().to_date_string()
# '2019-03-27'

pendulum.now().to_formatted_date_string()
# 'Mar 27, 2019'

pendulum.now().to_day_datetime_string()
# 'Wed, Mar 27, 2019 12:04 AM'

3
Anche i grandi panda lo hanno!
ZygD,

1
Questo è davvero fantastico, in particolare quando si lavora sui panda
loveR

pd.to_datetime (day) .date () è utile se stai usando i panda e non vuoi convertirti in str. Grazie!
Brndn,

4

Risposta molto tardi, ma puoi usare:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14

1
grazie, questa è la più pulita.
Barbaros Özhan,


-5

Preferisco questo, perché questo è semplice, ma forse in qualche modo inefficiente e difettoso. È necessario controllare il codice di uscita del comando shell se si desidera un programma fortemente a prova di errore.

os.system('date +%Y-%m-%d')

4
Questo dovrebbe essere usato solo allo scopo di verificare cosa restituirà il comando data di sistema, piuttosto che formattare effettivamente una data. Ciò è dovuto a diversi motivi oltre al controllo del codice di uscita. 1. Non portatile. Il comando date su Windows imposta la data 2. Inefficiente. Deve creare un'intera shell, che deve quindi analizzare, trovare ed eseguire il comando, restituire l'output e quindi distruggere quella shell 3. È semplicemente non ritmico - mostra che non conosci librerie fondamentali ben note, e può anche indurre in errore i nuovi arrivati ​​nella lingua che vedono quel codice
Capitano Lepton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.