it-swarm.com.de

Python-Datetime zu Zeichenfolge ohne Mikrosekunden-Komponente

Ich füge den Bitbucket-API-Antworten UTC-Zeitzeichenfolgen hinzu, die derzeit nur Zeitzeichenfolgen von Amsterdam (!) Enthalten. Für die Konsistenz mit den an anderen Stellen zurückgegebenen UTC-Zeitzeichenfolgen ist das gewünschte Format 2011-11-03 11:07:04 (gefolgt von +00:00, aber das ist nicht allgemein).

Was ist der beste Weg, um eine solche Zeichenfolge (ohne eine Mikrosekunden-Komponente) aus einer datetime-Instanz with einer Mikrosekunden-Komponente zu erstellen?

>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026

Ich füge die beste Option hinzu, die mir als mögliche Antwort aufgefallen ist, aber es könnte eine elegantere Lösung geben.

Edit: Ich sollte erwähnen, dass ich nicht eigentlich die aktuelle Uhrzeit drucke. Ich habe datetime.now verwendet, um ein schnelles Beispiel zu geben. Die Lösung sollte daher nicht davon ausgehen, dass jede datetime-Instanz Mikrosekunden-Komponenten enthält.

328
davidchambers

Wenn Sie ein datetime-Objekt in einem bestimmten Format formatieren möchten, das sich vom Standardformat unterscheidet, empfiehlt es sich, dieses Format explizit anzugeben:

>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'

In der Dokumentation zu datetime.strftime() finden Sie eine Erläuterung der %-Direktiven.

702
Sven Marnach
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
141
davidchambers

So mache ich es. ISO-Format:

import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'

Sie können das 'T' ersetzen, wenn Sie kein ISO-Format wünschen:

datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
34
radtek

In Python 3.6:

from datetime import datetime
datetime.datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'

https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat

33
codeif

Noch eine andere Option:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'

Standardmäßig wird die Ortszeit verwendet. Wenn Sie UTC benötigen, können Sie Folgendes verwenden:

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
16
Andrew Clark

Behalten Sie die ersten 19 Zeichen, die Sie per Slicing gewünscht haben:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
14

Da nicht alle datetime.datetime-Instanzen eine Mikrosekunden-Komponente haben (d. H. Wenn sie Null ist), können Sie die Zeichenfolge in ein "." und nimm nur den ersten Artikel, der immer funktionieren wird:

unicode(datetime.datetime.now()).partition('.')[0]
5
Austin Marshall

Wir können etwas wie unten versuchen

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
1
Abhishek Bajaj

Normalerweise mache ich:

import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0)  # To print now without microsecond.

# To print now:
print(now)

ausgabe:

2019-01-13 14:40:28
1
An0n

Ich fand das der einfachste Weg.

>>> t = datetime.datetime.now()
>>> t
datetime.datetime(2018, 11, 30, 17, 21, 26, 606191)
>>> t = str(t).split('.')
>>> t
['2018-11-30 17:21:26', '606191']
>>> t = t[0]
>>> t
'2018-11-30 17:21:26'
>>> 
0
Muhammed Irfan