2014-09-23 5 views
5

Dies sollte einfach sein, aber wie immer wild overcomplicated Datetime-Chaos Python macht einfache Dinge kompliziert ...eine analysierte Zeit mit dem heutigen Datum in Python Kombination

Also habe ich eine Zeit-String in HH bekam: MM-Format (zB '09: 30 '), die ich mit dem heutigen Datum in eine Datetime umwandeln möchte. Leider ist das Standarddatum 1. Januar 1900:

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

datetime.combine sieht aus wie es für den genau gemeint ist, aber ich werde gestopft werden, wenn ich herausfinden, wie die Zeit, analysiert werden, damit es es akzeptieren werden:

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' 

Diese Ungeheuerlichkeit funktioniert ...

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

... aber es muss ein besserer Weg, das zu tun ...!?

Antwort

11

Die function signature sagt:

datetime.combine(date, time) 

so ein datetime.date Objekt als erstes Argument übergeben, und ein datetime.time Objekt als das zweite Argument:

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