在Python中将解析的时间与今天的日期相结合

时间:2014-09-23 13:49:45

标签: python datetime time strptime

这应该很简单,但是Python的日常时间过于复杂,使得简单的事情变得复杂......

所以我有一个HH:MM格式的时间字符串(例如'09:30'),我想把它变成今天日期的日期时间。不幸的是,默认日期是1900年1月1日:

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

datetime.combine看起来它的意思就是这个,但如果我能弄清楚如何解析时间以便接受它,我会感到很沮丧:

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'

这种怪物有效......

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

...但必须才能更好地做到这一点......!

2 个答案:

答案 0 :(得分:11)

function signature说:

datetime.combine(date, time)

所以传递datetime.date对象作为第一个参数,并将datetime.time对象作为第二个参数传递:

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

答案 1 :(得分:1)

pip install python-dateutil

>>> from dateutil import parser as dt_parser
>>> dt_parser.parse('07:20')
datetime.datetime(2016, 11, 25, 7, 20)

https://dateutil.readthedocs.io/en/stable/parser.html