Konvertieren Sie das Datum / Uhrzeit-Objekt nur in Python in eine Datumszeichenfolge

282

Ich sehe viel beim Konvertieren einer Datumszeichenfolge in ein datetimeObjekt in Python, aber ich möchte den anderen Weg gehen.
ich habe

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

und ich würde es gerne in string like konvertieren '2/23/2012'.

wilbev
quelle

Antworten:

487

Sie können strftime verwenden , um Ihr Datum zu formatieren.

Z.B,

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

wird ergeben:

'02/23/2012'

Weitere Informationen zur Formatierung finden Sie hier

Levon
quelle
6
Sehr nützlich für DateTimeFieldoder DateFieldin Django. Danke
erajuan
3
Verwenden Sie t = datetime.datetime.now(), um das aktuelle Datum zu verwenden
Gizzmole
Soweit ich aus den Dokumenten ersehen kann, gibt es keine Möglichkeit, ein gepolstertes Datum ungleich Null zurückzugeben, z. B. "23.02.2012".
Ron Kalian
183

dateund datetimeObjekte (und timeauch) unterstützt eine Mini-Sprachausgabe zu spezifizieren , und es gibt zwei Möglichkeiten , um den Zugriff darauf:

  • direkter Methodenaufruf : dt.strftime('format here'); und
  • neue Formatmethode: '{:format here}'.format(dt)

Ihr Beispiel könnte also so aussehen:

dt.strftime('%m/%d/%Y')

oder

'{:%m/%d/%Y}'.format(dt)

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

'%s/%s/%s' % (dt.month, dt.day, dt.year)

Die Zeit zum Erlernen der Minisprache lohnt sich.


Als Referenz sind hier die Codes, die in der Minisprache verwendet werden:

  • %a Wochentag als abgekürzter Name des Gebietsschemas.
  • %A Wochentag als vollständiger Name des Gebietsschemas.
  • %w Wochentag als Dezimalzahl, wobei 0 Sonntag und 6 Samstag ist.
  • %d Tag des Monats als null 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 null 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 Das Gebietsschema entspricht entweder AM oder PM.
  • %M Minute als mit Nullen aufgefüllte Dezimalzahl. 00, ..., 59
  • %S Zweitens 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 Zeitzonenname (leer, wenn naiv), UTC, EST, CST
  • %j Tag des Jahres als null 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 Uhrzeitdarstellung des Gebietsschemas.
  • %x Die entsprechende Datumsdarstellung des Gebietsschemas.
  • %X Die entsprechende Zeitdarstellung des Gebietsschemas.
  • %% Ein wörtliches '%' Zeichen.
Ethan Furman
quelle
29

Andere Option:

import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'
Paul Joireman
quelle
Obwohl es bei der Frage darum geht, "nur Date" zu bekommen, bin ich dafür gekommen, also danke. Um ein bisschen humaner zu werden: datetime.datetime.now().ctime()==>'Wed Sep 4 13:12:39 2019'
Denis
13

Sie können einfache Formatierungsmethoden für Zeichenfolgen 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'
juliomalegria
quelle
3
Ebenso können Sie so etwas tun '{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5)). Weitere Informationen finden
Sie unter
9

type-specific formatting kann auch verwendet werden:

t = datetime.datetime(2012, 2, 23, 0, 0)
"{:%m/%d/%Y}".format(t)

Ausgabe:

'02/23/2012'
Midori
quelle
4

Wenn Sie nach einer einfachen Möglichkeit datetimezur Zeichenfolgenkonvertierung suchen und das Format weglassen können. Sie können datetimeObjekte in strArray-Slicing konvertieren und dann 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'

Beachten Sie jedoch Folgendes. Wenn andere Lösungen ansteigen und AttributeErrordie Variable Nonein diesem Fall ist, erhalten Sie eine 'None'Zeichenfolge.

In [9]: str(None)[:19]
Out[9]: 'None'
Daniil Mashkin
quelle
3

Sie können ein datetime-Objekt in eine Zeichenfolge konvertieren, indem Sie direkt mit den Komponenten des datetime-Objekts arbeiten.

from datetime import date  

myDate = date.today()    
#print(myDate) would output 2017-05-23 because that is today
#reassign the myDate variable to myDate = myDate.month 
#then you could print(myDate.month) and you would get 5 as an integer
dateStr = str(myDate.month)+ "/" + str(myDate.day) + "/" + str(myDate.year)    
# myDate.month is equal to 5 as an integer, i use str() to change it to a 
# string I add(+)the "/" so now I have "5/" then myDate.day is 23 as
# an integer i change it to a string with str() and it is added to the "5/"   
# to get "5/23" and then I add another "/" now we have "5/23/" next is the 
# year which is 2017 as an integer, I use the function str() to change it to 
# a string and add it to the rest of the string.  Now we have "5/23/2017" as 
# a string. The final line prints the string.

print(dateStr)  

Ausgabe -> 23.05.2017

Darrell White
quelle
2

Sie können datetime in string konvertieren.

published_at = "{}".format(self.published_at)
Kimsal San
quelle
2

Die Verkettung von str.joinZeichenfolgen kann zum Erstellen der Zeichenfolge verwendet werden.

d = datetime.now()
'/'.join(str(x) for x in (d.month, d.day, d.year))
'3/7/2016'
Nizam Mohamed
quelle
1

Wenn Sie auch die Zeit wollen, gehen Sie einfach mit

datetime.datetime.now().__str__()

Druckt 2019-07-11 19:36:31.118766in der Konsole für mich

phil294
quelle