Obtenir la date d'aujourd'hui en AAAA-MM-JJ en Python?

326

J'utilise:

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

pour renvoyer la date du jour au YYYY-MM-DDformat.

Existe-t-il un moyen moins grossier pour y parvenir?

Pyderman
la source
3
Que voulez-vous dire par «brut»?
Gombat
4
Peut être ça? \ n now = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Gombat
3
@Gombat Ce que je veux dire, c'est d'après mon expérience, il y a généralement une manière intégrée d'obtenir la chose que nous voulons en Python sans avoir à diviser, indexer, concaténer, rejoindre etc.
Pyderman

Réponses:

604

Vous pouvez utiliser strftime :

from datetime import datetime

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

De plus, pour tous ceux qui recherchent également une heure, une minute et une seconde à la fin: (Commentaire de Gabriel Staples )

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
diegueus9
la source
il y a aussi une forte probabilité que "% x" fonctionne ... mais cela dépend des paramètres régionaux
Joran Beasley
19
Pour tous ceux qui recherchent également une heure, une minute et une seconde sans rembourrage à la fin:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples,
que diriez-vous juste time.strftime("%Y-%m-%d")?
aderchox
Pour la date UTC:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro
À noter que datecela est disponible ainsi quedatetime
dummyDev
116

Vous pouvez utiliser datetime.date.today()et convertir l' datetime.dateobjet résultant en une chaîne:

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'
kmonsoor
la source
Est-il possible de changer le séparateur en /?
Stevoisiak
3
@StevenVascellaro ce seraitdate.today().strftime('%Y/%m/%d')
kmonsoor
2
@StevenVascellaro Mauvaise idée. Le lecteur suppose normalement que le séparateur est .«DMY», le séparateur /vers M/D/Yet le séparateur -vers Y-M-D. Bien que tout le monde ne suive pas ces directives, il serait utile de lire les dates à l'échelle internationale tant que tout le monde n'est pas passé à Y-M-D.
glglgl
1
@glglgl Je travaille avec une API qui suppose le format de date américain m / d / y. J'ai déjà changé l'ordre dans ma candidature.
Stevoisiak
1
@glglgl Oui, j'utilise m / d / y
Stevoisiak
35

Datetime est tout simplement charmant si vous aimez vous souvenir des codes amusants. Ne préférez-vous pas la simplicité?

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

Ce module est assez intelligent pour comprendre ce que vous voulez dire .

Faites-le pip install arrow.

Addendum: En réponse à ceux qui s'exercent sur cette réponse, permettez-moi de dire que la flèche représente l'une des approches alternatives pour gérer les dates en Python. C'est surtout ce que je voulais suggérer.

Bill Bell
la source
17
pour une tâche simple comme celle-ci, pourquoi utiliser une autre bibliothèque alors que la bibliothèque intégrée peut le faire aussi simplement. Bien sûr, si l'utilisateur a besoin d'une autre multitude de fonctions liées à {time, date}, il est logique d'ajouter une nouvelle bibliothèque.
kmonsoor
2
tu m'as fait rire en lisant cette 2ème ligne de code. comment est-ce mieux que print(date.today())>> "2018-12-16" ?? lol et obtenir facilement les valeurs int t.year,t.month,t.day+1>> (2018, 12, 17) où t = date.today()et le fait que les gens n'ont pas à appeler la flèche verte pour leur dire l'heure. oh mon dieu c'est trop de code à retenir ...
Puddle
1
@Puddle: Hilarious.
Bill Bell
@kmonsoor En quoi est-ce import datetimedifférent de import arrow? Bien sûr, un est intégré, mais si arrowfournit un format plus pratique, alors pourquoi ne pas l'utiliser?
information_interchange
1
@information_interchange vous avez déjà répondu à votre question. Intégré vs non. Si quelqu'un a besoin de ces trucs supplémentaires, bien sûr, pourquoi pas arrow? Mais, pour de nombreux projets simples, c'est tout simplement inutile. De plus, dans de nombreux projets internes à l'entreprise, ppl doit obtenir l'approbation pour l'inclusion de nouvelles bibliothèques.
kmonsoor
30

J'utilise toujours la isoformat()fonction pour cela.

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

Notez que cela fonctionne également sur les objets datetime si vous avez également besoin de l'heure au format standard.

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

D'autres réponses suggèrent l'utilisation de python datetime.datetime, mais comme @Bill Bell l'a dit, il existe d'autres bibliothèques qui offrent des datetimeinterfaces plus simples soit en tant que service, soit en tant que partie d'un écosystème plus large d'API. Voici deux de ces bibliothèques qui rendent le travail datetimestrès simple.

PANDAS

Vous pouvez utiliser à pd.to_datetimepartir de la bibliothèque pandas . Voici différentes options, selon ce que vous souhaitez retourner.

import pandas as pd

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

En tant qu'objet datetime python ,

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

En tant que chaîne de date formatée,

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'

Pour obtenir uniquement la date de l'horodatage, appelez Timestamp.date.

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

Mis à part to_datetime, vous pouvez instancier directement un Timestampobjet en utilisant,

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)

Si vous souhaitez rendre votre fuseau horaire Timestamp conscient, passez un fuseau horaire à l' tzargument.

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

PENDULE

Si vous travaillez avec un pendule , il existe des choix intéressants. Vous pouvez obtenir l'horodatage actuel en utilisant now()ou la date d'aujourd'hui en utilisant 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'))

De plus, vous pouvez également obtenir tomorrow()ou yesterday()la date de » directement , sans avoir à faire une arithmétique timedelta supplémentaire.

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'))

Plusieurs options de formatage sont disponibles.

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'
cs95
la source
3
De bonnes nouvelles pandas l'ont aussi!
ZygD
1
Celui-ci est vraiment génial, en particulier lorsque l'on travaille sur des pandas
loveR
pd.to_datetime (day) .date () est utile si vous utilisez des pandas et que vous ne souhaitez pas convertir en str. Merci!
Brndn
4

Réponse très tardive, mais vous pouvez utiliser:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14
CONvid19
la source
1
merci, c'est le plus propre.
Barbaros Özhan
2

Vous pouvez utiliser,

>>> from datetime import date
>>> date.today().__str__()
'2019-10-05'
Mohideen bin Mohammed
la source
2
str(date.today())est probablement encore mieux
information_interchange
ceci est une copie de cette réponse stackoverflow.com/a/47984538
Boris
-5

Je préfère cela, car c'est simple, mais peut-être en quelque sorte inefficace et bogué. Vous devez vérifier le code de sortie de la commande shell si vous voulez un programme fortement protégé contre les erreurs.

os.system('date +%Y-%m-%d')
plhn
la source
4
Cela doit être utilisé uniquement dans le but de vérifier ce que la commande système date renverra, plutôt que de formater réellement une date. Ceci est pour plusieurs raisons en dehors de la vérification du code de sortie. 1. Non portable. La commande date sous Windows définit la date 2. Inefficace. Il doit créer un shell entier, qui doit ensuite analyser, trouver et exécuter la commande, retourner la sortie, puis détruire ce shell 3. Il est tout simplement impythonique - cela montre que vous ne connaissez pas les bibliothèques fondamentales bien connues, et peut également induire en erreur les nouveaux arrivants dans la langue qui voient ce code
Captain Lepton