2012-11-25 13 views
11

Sto raschiando una pagina che include, tra le altre cose, informazioni sulla data. Quindi ho una variabile denominata warrant_issued che contiene u'11/5/2003' - Voglio memorizzarla come una data leggibile dalla macchina. PHP ha una pratica funzione strtotime che funziona in modo favoloso. Speravo che datetime s' strptime mi avrebbe aiutato, ma non sembra essere disponibile in mia versione di datetime - qui è tutto nella mia scheda completa su datetime.Come faccio a strtotime 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 

sto usando ipython 2.7. 2+

Sto abbaiando sull'albero sbagliato qui? Qual è il modo migliore per trasformare u'11/5/2003' in una data?

risposta

10

strptime() è sicuramente l'approccio giusto, è solo un metodo di classe per datetime class (parte in modo confuso del modulo datetime).

Cioè, datetime.datetime.strptime() è quello che stai cercando (e non datetime.strptime()

+1

Ma la funzione php strtotime in grado di rilevare automaticamente il formato della stringa, c'è qualche approcci simili in Python? –

+1

La ['dateutil' library] (http://dateutil.readthedocs.io/en/stable/parser.html) può analizzare stringhe datetime (inferendo il loro formato). Tuttavia, si noti che "11/5/2003" non è un formato non ambiguo (MM/GG o GG/MM differisce dalle impostazioni internazionali), pertanto in questo caso, dateutil deve essere usato con cautela. –

+0

@DavidCain php avverte anche su questi problemi. Personalmente mi piace l'abilità apparentemente magica di analizzare le stringhe di data usando 'strtotime()' in php nel formato corretto ma non mi piace la mancanza di specificità. – jamescampbell

6

Prova questa:.

Per l'uso con il datetime module, documentazione 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 

utilizzare con il time module, documentazione 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

Grazie al commento di risposta da @ David Cain:

La biblioteca dateutil può analizzare le stringhe datetime (inferendo loro formato). Tuttavia, si noti che "11/5/2003" non è un formato non ambiguo (MM/GG o GG/MM differisce dalle impostazioni internazionali), pertanto in questo caso, dateutil deve essere usato con cautela. - David Cain

Quindi una buona pratica alternativa è quella di utilizzare la libreria dateutil:

>>> 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) 
Problemi correlati