Ich füge UTC-Zeitzeichenfolgen zu Bitbucket-API-Antworten hinzu, die derzeit nur Amsterdamer (!) Zeitzeichenfolgen enthalten. Aus Gründen der Konsistenz mit den an anderer Stelle zurückgegebenen UTC-Zeitzeichenfolgen ist das gewünschte Format 2011-11-03 11:07:04
(gefolgt von +00:00
, aber das ist nicht von Belang).
Was ist der beste Weg, um eine solche Zeichenfolge ( ohne Mikrosekundenkomponente) aus einer datetime
Instanz mit einer Mikrosekundenkomponente zu erstellen ?
>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026
Ich werde die beste Option, die mir in den Sinn gekommen ist, als mögliche Antwort hinzufügen, aber es kann durchaus eine elegantere Lösung geben.
Edit: Ich sollte erwähnen , dass ich nicht wirklich die aktuelle Zeit Druck - habe ich datetime.now
ein kurzes Beispiel zur Verfügung zu stellen. Die Lösung sollte daher nicht davon ausgehen, dass datetime
empfangene Instanzen Mikrosekunden-Komponenten enthalten.
quelle
.isoformat()
die Mikrosekunden enthält. Wenn es das ist, was Sie brauchen, seien Sie explizit darüber. Jeder wird sofort verstehen, was dieser Code tut. Kaum jemand wird den anderen Code verstehen, ohne die Dokumentation zu lesen.quelle
.isoformat([sep])
- Geben Sie eine Zeichenfolge zurück, die Datum und Uhrzeit im ISO 8601-Format darstellt, JJJJ-MM-TTTHH: MM: SS.mmmmmm oder, falls Mikrosekunde ist 0, JJJJ-MM-TTTHH: MM: SS "In Python 3.6:
https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat
quelle
So mache ich es. ISO-Format:
Sie können das 'T' ersetzen, wenn Sie kein ISO-Format wünschen:
quelle
.isoformat()
überunicode()
?unicode()
möchten, und wenn Sie ISO-8601 möchten, verwenden Sieisoformat()
unicode()
ist bequemer als.isoformat().replace('T', ' ')
sicherlich. ;)isoformat
Akzeptiert den Trennzeichenspezifizierer, daher sollte kein Ersetzen durchgeführt werden. tun Sie einfach:datetime.datetime.now().replace(microsecond=0).isoformat(' ')
Noch eine Option:
Standardmäßig wird die Ortszeit verwendet. Wenn Sie UTC benötigen, können Sie Folgendes verwenden:
quelle
Behalten Sie die ersten 19 Zeichen, die Sie wollten, per Slicing:
quelle
+05:30
. Richtig wärestr(now())[:19]
.10000
wird eine Sekunde verpasstNormalerweise mache ich:
Ausgabe:
quelle
Da nicht alle
datetime.datetime
Instanzen eine Mikrosekundenkomponente haben (dh wenn sie Null ist), können Sie die Zeichenfolge auf einem "partitionieren". und nimm nur den ersten Gegenstand, der immer funktioniert:quelle
Wir können so etwas wie unten versuchen
quelle
.isoformat(' ', 'seconds')
in einer früheren Antwort vorgeschlagen.Ich fand das der einfachste Weg.
quelle
Dies verwende ich, weil ich es besser verstehen und mich daher besser daran erinnern kann (und das Datums- und Uhrzeitformat kann auch nach Ihrer Wahl angepasst werden): -
quelle