Wie verwandle ich eine Python-Datumszeit in eine Zeichenfolge mit lesbarem Formatdatum?

171
t = e['updated_parsed']
dt = datetime.datetime(t[0],t[1],t[2],t[3],t[4],t[5],t[6]
print dt
>>>2010-01-28 08:39:49.000003

Wie verwandle ich das in einen String?:

"January 28, 2010"
TIMEX
quelle
8
dt = datetime.datetime(*t[:7])

Antworten:

242

Die datetime-Klasse hat eine Methode strftime. Die Python-Dokumente dokumentieren die verschiedenen Formate, die sie akzeptieren:

Für dieses spezielle Beispiel würde es ungefähr so ​​aussehen:

my_datetime.strftime("%B %d, %Y")
Cristian
quelle
1
Dumme Frage ... strftimeUnterscheiden sich Python 2 und 3?
JWW
Und wenn auf welche Weise
Xanlantos
112

So können Sie dasselbe mit der allgemeinen Formatierungsfunktion von Python erreichen ...

>>>from datetime import datetime
>>>"{:%B %d, %Y}".format(datetime.now())

Die hier verwendeten Formatierungszeichen sind die gleichen wie die von strftime verwendeten . Verpassen Sie nicht die führende Position : im Formatbezeichner.

Die Verwendung von format () anstelle von strftime () kann den Code in den meisten Fällen lesbarer, einfacher zu schreiben und konsistent mit der Art und Weise machen, wie formatierte Ausgaben generiert werden ...

>>>"{} today's date is: {:%B %d, %Y}".format("Andre", datetime.now())

Vergleichen Sie das Obige mit der folgenden Alternative zu strftime () ...

>>>"{} today's date is {}".format("Andre", datetime.now().strftime("%B %d, %Y"))

Darüber hinaus wird das Folgende nicht funktionieren ...

>>>datetime.now().strftime("%s %B %d, %Y" % "Andre")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    datetime.now().strftime("%s %B %d, %Y" % "Andre")
TypeError: not enough arguments for format string

Und so weiter...

Autodidakt
quelle
1
Ich habe mich gefragt, welche Vorteile die Verwendung von format () für diesen Fall über strftime () hat. Bietet eine der beiden Methoden einen anderen Vorteil als die persönlichen Vorlieben? Was sind die Leistungsunterschiede?
Andre
2
@Andre Danke für deine Frage! Persönliche Vorlieben richten sich oft nach Erfahrung. In meiner aktualisierten Antwort erfahren Sie, warum ich format () gegenüber strftime () bevorzuge. Performance und Python sind zwei Wörter, die nicht gut zusammenpassen. Ich würde mich nicht übermäßig um die Leistung kümmern, wenn ich mich für Python entschieden hätte. Wenn ich Leistung benötige, verwende ich eine statisch typisierte Hochleistungssprache.
Autodidakt
1
Die Formatierungsmethode ist in den meisten Fällen einfacher. Vergleiche: print 'Today is {:%B %d, %Y}'.format(datetime.now())mit print 'Today is {}'.format(datetime.now().strftime('%B %d, %Y'). Wenn Sie die format () -Methode trotzdem verwenden, warum nicht auch für die Datumsformatierung?
ChaimG
30

Verwenden von F-Strings in Python 3.6+.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'
Natim
quelle
Dies löst einen Syntaxfehler aus: "SyntaxError: ungültige Syntax". Könnten Sie bitte näher darauf eingehen?
Sajid
OK. Ich habe Python 3.5.1. Deswegen. Danke für die Klarstellung.
Sajid
21

sehr alte Frage, ich weiß. Aber mit den neuen F-Strings (ab Python 3.6) gibt es neue Optionen. der Vollständigkeit halber hier:

from datetime import datetime

dt = datetime.now()

# str.format
strg = '{:%B %d, %Y}'.format(dt)
print(strg)  # July 22, 2017

# datetime.strftime
strg = dt.strftime('%B %d, %Y')
print(strg)  # July 22, 2017

# f-strings in python >= 3.6
strg = f'{dt:%B %d, %Y}'
print(strg)  # July 22, 2017

strftime()und strptime()Verhalten erklärt, was die Formatspezifizierer bedeuten.

Hiro-Protagonist
quelle
9

Das Python-Datum / Uhrzeit-Objekt verfügt über ein Methodenattribut, das in lesbarem Format gedruckt wird.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 
SuperNova
quelle
Dies ist eine der besten, einfachsten und schnellsten Möglichkeiten, die DateTime in einem lesbaren Format abzurufen.
Mujeeb Ishaque
-2

Dies ist für das Format das Datum?

def format_date(day, month, year):
        # {} betekent 'plaats hier stringvoorstelling van volgend argument'
        return "{}/{}/{}".format(day, month, year)
Thomas Wouters
quelle