Ich habe eine riesige Liste solcher Datums- und Uhrzeitangaben als Zeichenfolgen:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Ich werde diese zurück in die richtigen Datums- / Uhrzeitfelder in einer Datenbank schieben, damit ich sie in echte Datums- / Uhrzeitobjekte verwandeln kann.
Dies geht durch Djangos ORM, daher kann ich SQL nicht verwenden, um die Konvertierung beim Einfügen durchzuführen.
strptime()
wird Sie verrückt machen, es sei denn, Sie wickeln es. Siehe meine Antwort, basierend auf der Antwort von Or WeisAntworten:
datetime.strptime
ist die Hauptroutine zum Parsen von Zeichenfolgen in Datumsangaben. Es kann alle Arten von Formaten verarbeiten, wobei das Format durch eine von Ihnen angegebene Formatzeichenfolge bestimmt wird:Das resultierende
datetime
Objekt ist zeitzonen-naiv.Links:
Python-Dokumentation für
strptime
: Python 2 , Python 3Python-Dokumentation für
strptime
/strftime
format-Zeichenfolgen: Python 2 , Python 3strftime.org ist auch eine wirklich schöne Referenz für strftime
Anmerkungen:
strptime
= "String-Analysezeit"strftime
= "Zeichenfolgenformatzeit"quelle
date
anstelle von a möchtendatetime
, geht das gut durchdatetime
:datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
datetime
Objekt erhalten, indem Sie diese Zeile in Python 3 hinzufügen:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
"%Y-%m-%d %H:%M:%S"
from datetime import datetime
anstatt nurimport datetime
.Verwenden Sie die Dateutil- Bibliothek eines Drittanbieters :
Es kann die meisten Datumsformate verarbeiten, einschließlich desjenigen, das Sie analysieren müssen. Es ist bequemer, als
strptime
es die meiste Zeit das richtige Format erraten kann.Es ist sehr nützlich zum Schreiben von Tests, bei denen die Lesbarkeit wichtiger ist als die Leistung.
Sie können es installieren mit:
quelle
Schauen Sie sich strptime im Zeitmodul. Es ist die Umkehrung der Zeit .
quelle
Ich habe ein Projekt zusammengestellt, das einige wirklich nette Ausdrücke konvertieren kann. Überprüfen Sie die Zeitleiste .
Hier einige Beispiele:
pip install timestring
quelle
import timestring
timestring.Date('27 Mar 2014 12:32:29 GMT').year
Diese Bibliothek hat es so einfach gemacht! Vielen Dank.2017-02-01
. Gleiches gilt für den 5. Februar 2017 (der 5. Februar 2017 ist jedoch korrekt). Keines der beiden letzten Formate ist meines Wissens nach ein gewohntes Format, aber ich dachte, ich würde trotzdem darauf hinweisen.Date("20180912")
ein Wert von analysiert2018-11-21
. Benutzung auf eigene Gefahr.Denken Sie daran, und Sie mussten bei der Datums- / Uhrzeitkonvertierung nicht erneut verwirrt werden.
Zeichenfolge zum Datum / Uhrzeit-Objekt =
strptime
datetime Objekt in anderen Formaten =
strftime
Jun 1 2005 1:33PM
ist gleich
%b %d %Y %I:%M%p
Sie benötigen also Strptime, dh Konvertieren
string
inAusgabe
Was ist, wenn Sie ein anderes Datumsformat haben? Sie können panda oder dateutil.parse verwenden
Ausgabe
quelle
%b
unterbrochen, wenn Sie ein englisches Datum auf einem Computer analysieren, der kein englisches Gebietsschema hat?In Python> = 3.7.0,
zu konvertieren YYYY-MM-DD String in Datetime - Objekt ,
datetime.fromisoformat
könnte verwendet werden.quelle
Viele Zeitstempel haben eine implizite Zeitzone. Um sicherzustellen, dass Ihr Code in jeder Zeitzone funktioniert, sollten Sie UTC intern verwenden und bei jedem Eintritt eines Fremdkörpers in das System eine Zeitzone anhängen.
Python 3.2+:
quelle
mktime()
während der Sommerzeitübergänge) 1. Methode bei, wenn Sie die 2. Methode kennen (datetime.strptime()
)? Wenn Sie eine Ausnahme während einercalendar.timegm
(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
Hier sind zwei Lösungen, die Pandas verwenden, um als Zeichenfolgen formatierte Daten in datetime.date-Objekte zu konvertieren.
Timings
Und so konvertieren Sie die ursprünglichen Beispiele für Datum und Uhrzeit des OP:
Es gibt viele Optionen zum Konvertieren von Zeichenfolgen in Pandas-Zeitstempel mit
to_datetime
. Überprüfen Sie daher die Dokumente, wenn Sie etwas Besonderes benötigen.Ebenso verfügen Zeitstempel über viele Eigenschaften und Methoden , auf die zusätzlich zugegriffen werden kann
.date
quelle
Ich persönlich mag die Lösung mit dem
parser
Modul, das die zweite Antwort auf diese Frage ist und wunderschön ist, da Sie keine String-Literale erstellen müssen, damit es funktioniert. ABER ein Nachteil ist, dass es 90% langsamer ist als die akzeptierte Antwort mitstrptime
.Solange Sie dies nicht millionenfach tun , denke ich immer noch, dass die
parser
Methode bequemer ist und die meisten Zeitformate automatisch verarbeitet.quelle
Etwas, das hier nicht erwähnt wird und nützlich ist: dem Tag ein Suffix hinzufügen. Ich habe die Suffix-Logik entkoppelt, damit Sie sie für eine beliebige Zahl verwenden können, nicht nur für Datumsangaben.
quelle
quelle
Beispiel für ein Django-Zeitzonen-fähiges Datum / Uhrzeit-Objekt.
Diese Konvertierung ist für Django und Python sehr wichtig, wenn Sie
USE_TZ = True
:quelle
Erstellen Sie eine kleine Dienstprogrammfunktion wie:
Das ist vielseitig genug:
quelle
format
ist ein reserviertes Wort in Python und sollte nicht als Variablenname verwendet werden.Dies ist hilfreich für die Konvertierung von Zeichenfolgen in datetime und auch in die Zeitzone
quelle
Pfeil bietet viele nützliche Funktionen für Datum und Uhrzeit. Dieses Codebit gibt eine Antwort auf die Frage und zeigt, dass der Pfeil auch Daten einfach formatieren und Informationen für andere Gebietsschemas anzeigen kann.
Weitere Informationen finden Sie unter http://arrow.readthedocs.io/en/latest/ .
quelle
Sie können easy_date verwenden , um es einfach zu machen:
quelle
Wenn Sie nur das Datumsformat möchten, können Sie es manuell konvertieren, indem Sie Ihre einzelnen Felder wie folgt übergeben:
Sie können Ihre geteilten Zeichenfolgenwerte übergeben, um sie wie folgt in einen Datumstyp zu konvertieren:
Sie erhalten den resultierenden Wert im Datumsformat.
quelle
Sie können auch auschecken
dateparser
Installieren:
Ich denke, dies ist der einfachste Weg, um Daten zu analysieren.
Beispielcode:
Ausgabe:
quelle
Siehe meine Antwort .
In realen Daten ist dies ein echtes Problem: mehrere, nicht übereinstimmende, unvollständige, inkonsistente und mehrsprachige / regionale Datumsformate, die häufig frei in einem Datensatz gemischt werden. Es ist nicht in Ordnung, dass Produktionscode fehlschlägt, geschweige denn wie ein Fuchs ausnahmefreudig wird.
Wir müssen versuchen, ... mehrere Datums- / Uhrzeitformate fmt1, fmt2, ..., fmtn abzufangen und die Ausnahmen (von
strptime()
) für alle zu unterdrücken / zu behandeln, die nicht übereinstimmen (und insbesondere zu vermeiden, dass eine yukky n-tief eingerückte Versuchsleiter benötigt wird ..catch-Klauseln). Aus meiner Lösungquelle
Es zeigt die Spalte "Startdatum Uhrzeit" und "Letzte Anmeldezeit". Beide sind "Objekt = Zeichenfolgen" im Datenrahmen
Mit der oben genannten
parse_dates
Optionread_csv
können Sie Ihre Zeichenfolge datetime in das pandas datetime-Format konvertieren.quelle