2012-11-25 4 views
11

Ich kratze eine Seite, die unter anderem Datumsinformationen enthält. Also habe ich eine Variable namens warrant_issued, die u'11/5/2003' enthält - ich möchte dies als maschinenlesbares Datum speichern. PHP hat eine handliche strtotime Funktion, die fabelhaft funktioniert. Ich habe gehofft, dass datetime ‚s strptime mir helfen würde, aber es scheint nicht in meiner Version von datetime verfügbar zu sein - hier ist alles in meinem Register vollständig auf datetime.Wie strotime ich in Python?

In [231]: datetime. 
datetime.MAXYEAR   datetime.__hash__   datetime.__sizeof__ 
datetime.MINYEAR   datetime.__init__   datetime.__str__ 
datetime.__class__   datetime.__name__   datetime.__subclasshook__ 
datetime.__delattr__  datetime.__new__   datetime.date 
datetime.__dict__   datetime.__package__  datetime.datetime 
datetime.__doc__   datetime.__reduce__  datetime.datetime_CAPI 
datetime.__file__   datetime.__reduce_ex__  datetime.time 
datetime.__format__  datetime.__repr__   datetime.timedelta 
datetime.__getattribute__ datetime.__setattr__  datetime.tzinfo 

Ich verwende ipython 2.7. 2+

Werde ich hier den falschen Baum bellen? Was ist der beste Weg, u'11/5/2003' in ein Datum zu verwandeln?

Antwort

10

strptime() ist definitiv der richtige Ansatz, es ist nur eine Klassenmethode für die datetime class (verwirrend Teil des datetime-Moduls).

Das heißt, ist datetime.datetime.strptime() was Sie suchen (und nicht datetime.strptime()

+1

Aber die PHP strtotime Funktion kann automatisch das String-Format erfassen, ist es ähnliche Ansätze in Python? –

+1

Die ['dateutil' library] (http://dateutil.readthedocs.io/en/stable/parser.html) kann Datetime-Strings parsen (was auf ihr Format hindeutet). Beachten Sie jedoch, dass "11/5/2003" kein eindeutiges Format ist (MM/DD oder DD/MM unterscheidet sich je nach Gebietsschema), daher sollte dateutil in diesem Fall mit Vorsicht verwendet werden. –

+0

@DavidCain php warnt vor diesen Problemen. Ich persönlich mag die scheinbar magische Fähigkeit, Datenstrings mit 'strtotime()' in php in das richtige Format zu parsen, mag aber die fehlende Spezifität nicht. – jamescampbell

6

die Sie interessieren.

Zur Verwendung mit dem datetime module, Dokumentation here

>>>import datetime 
>>>a = u'11/5/2003' 
>>>time1 = datetime.datetime.strptime(a, "%m/%d/%Y") 
>>>print time1 
datetime.datetime(2003, 11, 5, 0, 0) 

In ipython:

In [1]: import datetime 

In [2]: a = u'11/5/2003' 

In [3]: time1 = datetime.datetime.strptime(a, "%m/%d/%Y") 

In [4]: print time1 
2003-11-05 00:00:00 

Verwendung mit der time module, Dokumentation here

>>>import time 
>>>a = u'11/5/2003' 
>>>time1 = time.strptime(a, "%m/%d/%Y") 
>>>print time1 
time.struct_time(tm_year=2003, tm_mon=11, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=309, tm_isdst=-1) 
1

Dank der Kommentar Antwort @ David Cain:

Die dateutil Bibliothek kann Datetime Strings analysieren (Folgern ihr Format). Beachten Sie jedoch, dass "11/5/2003" kein eindeutiges Format ist (MM/DD oder DD/MM unterscheidet sich je nach Gebietsschema), daher sollte dateutil in diesem Fall mit Vorsicht verwendet werden. - David Cain

So eine Alternative gute Praxis ist die dateutil Bibliothek zu verwenden:

>>> from dateutil.parser import parse 
>>> dt = parse('2016/12/05 05:18 pm') 
>>> dt 
datetime.datetime(2016, 12, 5, 17, 18) 
>>> dt.timestamp() 
1480929480.0 

>>> parse('16/11/12') 
>>> datetime.datetime(2012, 11, 16, 0, 0) 
Verwandte Themen