Erhalten Sie das heutige Datum in JJJJ-MM-TT in Python?

325

Ich benutze:

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

um das heutige Datum im YYYY-MM-DDFormat zurückzugeben.

Gibt es einen weniger groben Weg, um dies zu erreichen?

Pyderman
quelle
3
Was meinst du mit "roh"?
Gombat
4
vielleicht das? \ n now = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Gombat
3
@ Gombat Was ich meine, ist meiner Erfahrung nach, es gibt normalerweise eine eingebaute Methode, um das zu bekommen, was wir in Python wollen, ohne teilen, indizieren, concat, beitreten usw.
Pyderman

Antworten:

597

Sie können strftime verwenden :

from datetime import datetime

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

Darüber hinaus für alle, die am Ende auch nach einer gepolsterten Stunde, Minute und Sekunde suchen: (Kommentar von Gabriel Staples )

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
diegueus9
quelle
Es gibt auch eine starke Wahrscheinlichkeit, dass "% x" funktionieren würde ... aber das ist vom Gebietsschema abhängig
Joran Beasley
19
Für alle, die am Ende auch nach einer gepolsterten Stunde, Minute und Sekunde suchen: datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples
wie wäre es nur time.strftime("%Y-%m-%d")?
Aderchox
Für UTC-Datum:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro
Bemerkenswert ist, dass datedies ebenso verfügbar ist wiedatetime
dummyDev
116

Sie können datetime.date.today()das resultierende datetime.dateObjekt verwenden und in eine Zeichenfolge konvertieren :

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'
kmonsoor
quelle
Ist es möglich, das Trennzeichen auf zu ändern /?
Stevoisiak
3
@StevenVascellaro wäre esdate.today().strftime('%Y/%m/%d')
kmonsoor
2
@StevenVascellaro Schlechte Idee. Der Leser übernimmt normalerweise den Separator .zu ‚DMY‘, dem Separator /zu M/D/Yund der Separator -auf Y-M-D. Obwohl nicht jeder diese Richtlinien befolgt, würde es helfen, Daten international zu lesen, solange nicht jeder zu ihnen gewechselt ist Y-M-D.
glglgl
1
@glglgl Ich arbeite mit einer API, die das amerikanische Datumsformat m / d / y annimmt. Ich habe die Reihenfolge in meiner Bewerbung bereits geändert.
Stevoisiak
1
@glglgl Ja, ich benutze m / d / y
Stevoisiak
35

Datetime ist einfach schön, wenn Sie sich gerne an lustige Codes erinnern. Würden Sie nicht Einfachheit bevorzugen?

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

Dieses Modul ist klug genug, um zu verstehen, was Sie meinen .

Tu es einfach pip install arrow.

Nachtrag: Als Antwort auf diejenigen, die sich mit dieser Antwort beschäftigen, möchte ich nur sagen, dass der Pfeil einen der alternativen Ansätze für den Umgang mit Daten in Python darstellt. Das wollte ich vor allem vorschlagen.

Bill Bell
quelle
17
Warum sollten Sie für eine einfache Aufgabe wie diese eine andere Bibliothek verwenden, wenn die integrierte Bibliothek dies genauso einfach tun kann? Wenn der Benutzer eine andere Vielzahl von Funktionen im Zusammenhang mit {Zeit, Datum} benötigt, ist es natürlich sinnvoll, eine neue Bibliothek einzurichten.
kmonsoor
2
Sie haben mich zum Lachen gebracht, als ich diese zweite Codezeile gelesen habe. Wie ist das besser als print(date.today())>> "2018-12-16"? lol und einfach die int-Werte t.year,t.month,t.day+1>> (2018, 12, 17) erhalten, wo t = date.today()und die Tatsache, dass die Leute keinen grünen Pfeil aufrufen müssen, um ihnen die Zeit zu sagen. Oh Gott, das ist zu viel Code, um sich daran zu erinnern ...
Pfütze
1
@ Pfütze: Urkomisch.
Bill Bell
@kmonsoor Wie ist import datetimeanders als import arrow? Sicher ist eines eingebaut, aber wenn es arrowein bequemeres Format bietet, warum nicht?
information_interchange
1
@information_interchange Sie haben Ihre Frage bereits beantwortet. Eingebaute vs nicht. Wenn jemand diese zusätzlichen Sachen braucht, warum nicht arrow? Für viele einfache Projekte ist dies jedoch nicht erforderlich. Außerdem muss ppl in vielen unternehmensinternen Projekten die Genehmigung für die Aufnahme neuer Bibliotheken erhalten.
kmonsoor
30

Ich benutze immer die isoformat()Funktion dafür.

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

Beachten Sie, dass dies auch für datetime-Objekte funktioniert, wenn Sie die Zeit auch im Standardformat benötigen.

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

Andere Antworten deuten auf die Verwendung von Python hin datetime.datetime, aber wie @Bill Bell sagte, gibt es andere Bibliotheken, die einfachere datetimeSchnittstellen entweder als Service oder als Teil eines größeren Ökosystems von APIs anbieten . Hier sind zwei solche Bibliotheken, mit denen man arbeiten kanndatetimes sehr einfach machen.

PANDAS

Sie können pd.to_datetimeaus der Pandas- Bibliothek verwenden. Hier finden Sie verschiedene Optionen, je nachdem, was Sie zurückgeben möchten.

import pandas as pd

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

Als Python- Datetime- Objekt

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

Als formatierte Datumszeichenfolge

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'

Rufen Sie an, um nur das Datum aus dem Zeitstempel abzurufen Timestamp.date.

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

Abgesehen davon to_datetimekönnen Sie ein TimestampObjekt direkt instanziieren, indem Sie:

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)

Wenn Sie Ihre Zeitstempel-Zeitzone bekannt machen möchten, übergeben Sie dem tzArgument eine Zeitzone .

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

PENDEL

Wenn Sie mit Pendeln arbeiten , gibt es einige interessante Möglichkeiten. Sie können den aktuellen Zeitstempel mit now()oder das heutige Datum mit abrufen 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'))

Darüber hinaus können Sie auch erhalten tomorrow()oder yesterday()direkt ‚s Datum ohne zusätzliche Timedelta - Arithmetik zu tun.

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

Es stehen verschiedene Formatierungsoptionen zur Verfügung.

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
quelle
3
Gute Nachrichten Pandas hat es auch!
ZygD
1
Dieser ist wirklich großartig, besonders wenn man an Pandas arbeitet
loveR
pd.to_datetime (Tag) .date () ist nützlich, wenn Sie Pandas verwenden und nicht in eine str konvertieren möchten. Vielen Dank!
Brndn
4

Sehr späte Antwort, aber Sie können verwenden:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14
CONvid19
quelle
1
Danke, das ist das sauberste.
Barbaros Özhan
2

Sie können verwenden,

>>> from datetime import date
>>> date.today().__str__()
'2019-10-05'
Mohideen bin Mohammed
quelle
2
wahrscheinlich str(date.today())ist noch besser
information_interchange
Dies ist eine Kopie dieser Antwort stackoverflow.com/a/47984538
Boris
-5

Ich bevorzuge dies, weil dies einfach ist, aber vielleicht irgendwie ineffizient und fehlerhaft. Sie müssen den Exit-Code des Shell-Befehls überprüfen, wenn Sie ein stark fehlersicheres Programm wünschen .

os.system('date +%Y-%m-%d')
plhn
quelle
4
Dies sollte nur verwendet werden, um zu überprüfen, was der Befehl system date zurückgibt, anstatt ein Datum tatsächlich zu formatieren. Dies hat mehrere Gründe, abgesehen von der Überprüfung des Exit-Codes. 1. Nicht tragbar. Der Datumsbefehl unter Windows legt das Datum 2 fest. Ineffizient. Es muss eine gesamte Shell erstellt werden, die dann den Befehl analysieren, suchen und ausführen, die Ausgabe zurückgeben und dann die Shell 3 zerstören muss. Es ist einfach unpythonisch - es zeigt, dass Sie keine bekannten grundlegenden Bibliotheken kennen, und kann auch Neulinge in die Sprache irreführen, die diesen Code sehen
Captain Lepton