假设我有一些格式为%H:%M:%S
的字符串,例如04:35:45
。我想将它们转换为datetime.datetime
个对象,年/月/日与datetime.datetime.now()
相同。
我试过
now = datetime.now()
datetime_obj = datetime.strptime(time_string, "%H:%M:%S")
datetime_obj.year = now.year
datetime_obj.month = now.month
datetime_obj.day = now.day
这不起作用,因为year/month/day
是只读属性。那么什么是最好的解决方案?
答案 0 :(得分:7)
您想要datetime.combine(date, time)
:
>>> time = datetime.datetime.strptime("04:35:45", "%H:%M:%S").time()
>>> time
datetime.time(4, 35, 45)
>>> day = datetime.datetime.now().date()
>>> day
datetime.date(2016, 1, 6)
>>> datetime.datetime.combine(day, time)
datetime.datetime(2016, 1, 6, 4, 35, 45)
>>>
答案 1 :(得分:4)
第三方dateutil
在这种情况下使用当前日期:
>>> from dateutil.parser import parse
>>> time_string = "04:35:45"
>>> parse(time_string)
datetime.datetime(2016, 1, 6, 4, 35, 45)
或者,您可以使用.replace()
来设置年,月和日:
>>> datetime_obj = datetime.strptime(time_string, "%H:%M:%S")
>>> datetime_obj.replace(year=now.year, month=now.month, day=now.day)
datetime.datetime(2016, 1, 6, 4, 35, 45)
尽管如此,我真的很喜欢布鲁诺发布的.combine()
option。
答案 2 :(得分:1)
您可以使用datetime_obj.replace
。来自文档:
返回具有相同属性的日期时间,但通过指定的任何关键字参数给定新值的属性除外。
例如:
from datetime import datetime
time_string = "04:35:45"
now = datetime.now()
datetime_obj = datetime.strptime(time_string, "%H:%M:%S")
datetime_obj = datetime_obj.replace(
year = now.year,
month = now.month,
day = now.day
)
print datetime_obj
打印:
2016-01-06 04:35:45
答案 3 :(得分:1)
您可以将时间作为整数传递给datetime.replace
,而无需创建两个日期时间对象:
time_sring = "12:31:33"
hr, mn, sec = map(int, time_sring.split(":"))
dtetime_obj = datetime.now().replace( hour=hr, minute=mn, second=sec)
2016-01-06 12:31:33.439492