2014-09-23 11 views
5

Questo dovrebbe essere facile, ma come sempre selvaggiamente troppo complicata datetime pasticcio di Python sta facendo le cose semplici complicate ...Combinando una volta analizzato con la data odierna in Python

Così ho una stringa di tempo in formato HH: MM (ad esempio '09: 30 '), che mi piacerebbe trasformare in un datetime con la data di oggi. Purtroppo la data di default è 1 Gennaio 1900:

>>> datetime.datetime.strptime(time_str, "%H:%M") 
datetime.datetime(1900, 1, 1, 9, 50) 

datetime.combine sembra è pensata proprio per questo, ma io rammendare se riesco a capire come ottenere il tempo analizzato in modo che sarà accettarlo:

now = datetime.datetime.now() 
>>> datetime.datetime.combine(now, time.strptime('09:30', '%H:%M')) 
TypeError: combine() argument 2 must be datetime.time, not time.struct_time 

>>> datetime.datetime.combine(now, datetime.datetime.strptime('09:30', '%H:%M')) 
TypeError: combine() argument 2 must be datetime.time, not datetime.datetime 

>>> datetime.datetime.combine(now, datetime.time.strptime('09:30', '%H:%M')) 
AttributeError: type object 'datetime.time' has no attribute 'strptime' 

questa mostruosità funziona ...

>>> datetime.datetime.combine(now, 
    datetime.time(*(time.strptime('09:30', '%H:%M')[3:6]))) 
datetime.datetime(2014, 9, 23, 9, 30) 

... ma ci deve essere un modo migliore per farlo ...!?

risposta

11

Il function signature dice:

datetime.combine(date, time) 

così passare un oggetto datetime.date come primo argomento, e un oggetto datetime.time come secondo argomento:

>>> import datetime as dt 
>>> today = dt.date.today() 
>>> time = dt.datetime.strptime('09:30', '%H:%M').time() 
>>> dt.datetime.combine(today, time) 
datetime.datetime(2014, 9, 23, 9, 30) 
Problemi correlati