从“%H:%M:%S”创建日期时间的最佳方法是什么?

时间:2016-01-06 15:54:19

标签: python datetime

假设我有一些格式为%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是只读属性。那么什么是最好的解决方案?

4 个答案:

答案 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