464 Stimmen

Konvertierung eines datetime-Objekts in einen String mit Datum nur in Python

Ich sehe eine Menge über die Konvertierung einer Datumszeichenfolge in eine datetime Objekt in Python, aber ich möchte den anderen Weg gehen.
Ich habe

datetime.datetime(2012, 2, 23, 0, 0)

und ich möchte es in eine Zeichenkette umwandeln wie '2/23/2012' .

719voto

Levon Punkte 134187

Sie können verwenden strftime um Ihnen bei der Formatierung Ihres Datums zu helfen.

Z.B.,

import datetime
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')

ergeben wird:

'02/23/2012'

Weitere Informationen zur Formatierung siehe aquí

290voto

Ethan Furman Punkte 57238

date y datetime Objekte (und time auch) unterstützen eine Mini-Sprache zur Angabe der Ausgabe und es gibt zwei Möglichkeiten, darauf zuzugreifen:

Ihr Beispiel könnte also wie folgt aussehen:

  • dt.strftime('The date is %b %d, %Y')
  • 'The date is {:%b %d, %Y}'.format(dt)
  • f'The date is {dt:%b %d, %Y}'

In allen drei Fällen lautet die Ausgabe:

Das Datum ist der 23. Februar 2012.

Der Vollständigkeit halber: Sie können auch direkt auf die Attribute des Objekts zugreifen, aber dann erhalten Sie nur die Zahlen:

'The date is %s/%s/%s' % (dt.month, dt.day, dt.year)
# The date is 02/23/2012

Die Zeit, die man braucht, um die Mini-Sprache zu lernen, ist es wert.


Als Referenz sind hier die in der Minisprache verwendeten Codes aufgeführt:

  • %a Wochentag als abgekürzter Name des Gebietsschemas.
  • %A Wochentag als vollständiger Name des Gebietsschemas.
  • %w Wochentag als Dezimalzahl, wobei 0 für Sonntag und 6 für Samstag steht.
  • %d Tag des Monats als mit Nullen aufgefüllte Dezimalzahl.
  • %b Monat als abgekürzter Name des Gebietsschemas.
  • %B Monat als vollständiger Name des Gebietsschemas.
  • %m Monat als mit Nullen aufgefüllte Dezimalzahl. 01, ..., 12
  • %y Jahr ohne Jahrhundert als mit Nullen aufgefüllte Dezimalzahl. 00, ..., 99
  • %Y Jahr mit Jahrhundert als Dezimalzahl. 1970, 1988, 2001, 2013
  • %H Stunde (24-Stunden-Uhr) als mit Nullen aufgefüllte Dezimalzahl. 00, ..., 23
  • %I Stunde (12-Stunden-Uhr) als mit Nullen aufgefüllte Dezimalzahl. 01, ..., 12
  • %p Örtliche Entsprechung von AM oder PM.
  • %M Minute als mit Nullen aufgefüllte Dezimalzahl. 00, ..., 59
  • %S Sekunde als mit Nullen aufgefüllte Dezimalzahl. 00, ..., 59
  • %f Mikrosekunde als Dezimalzahl, links mit Nullen aufgefüllt. 000000, ..., 999999
  • %z UTC-Offset in der Form +HHMM oder -HHMM (leer, wenn naiv), +0000, -0400, +1030
  • %Z Name der Zeitzone (leer, wenn nicht vorhanden), UTC, EST, CST
  • %j Tag des Jahres als mit Nullen aufgefüllte Dezimalzahl. 001, ..., 366
  • %U Wochennummer des Jahres (Sonntag ist der erste) als mit Nullen aufgefüllte Dezimalzahl.
  • %W Wochennummer des Jahres (Montag ist der erste) als Dezimalzahl.
  • %c Die entsprechende Datums- und Zeitdarstellung des Gebietsschemas.
  • %x Die entsprechende Datumsdarstellung des Gebietsschemas.
  • %X Die entsprechende Zeitdarstellung des Gebietsschemas.
  • %% Ein wörtliches '%'-Zeichen.

64voto

Paul Joireman Punkte 2549

Eine andere Möglichkeit:

import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'

22voto

Daniil Mashkin Punkte 4035

Wenn Sie einen einfachen Weg suchen, um datetime in eine Zeichenkette umwandeln und kann das Format weglassen. Sie können konvertieren datetime Objekt zu str und dann Array-Slicing verwenden.

In [1]: from datetime import datetime

In [2]: now = datetime.now()

In [3]: str(now)
Out[3]: '2019-04-26 18:03:50.941332'

In [5]: str(now)[:10]
Out[5]: '2019-04-26'

In [6]: str(now)[:19]
Out[6]: '2019-04-26 18:03:50'

Aber beachten Sie Folgendes. Wenn andere Lösungen aufsteigen und AttributeError wenn die Variable None In diesem Fall erhalten Sie eine 'None' String.

In [9]: str(None)[:19]
Out[9]: 'None'

15voto

juliomalegria Punkte 23471

Sie können einfache Methoden zur String-Formatierung verwenden:

>>> dt = datetime.datetime(2012, 2, 23, 0, 0)
>>> '{0.month}/{0.day}/{0.year}'.format(dt)
'2/23/2012'
>>> '%s/%s/%s' % (dt.month, dt.day, dt.year)
'2/23/2012'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X