结合datetime.在datetime中带有时间字符串的日期对象.datetime对象



假设您有一个datetime.date对象,例如datetime.date.today()返回的对象。

然后,您还将得到一个表示时间的字符串,作为date对象的补充。

在datetime中结合这两者的python方法是什么?datetime对象?更具体地说,我可以避免将date对象转换为字符串吗?

我现在是这样做的:

def combine_date_obj_and_time_str(date_obj, time_str):
    # time_str has this form: 03:40:01 PM
    return datetime.datetime.strptime(date_obj.strftime("%Y-%m-%d") + ' ' + time_str, "%Y-%m-%d %I:%M:%S %p")
编辑:

我研究了datetime.datetime.combine作为第一个答案所描述的,但我有点茫然与获得时间字符串到一个时间对象:

>>> datetime.datetime.combine(datetime.date.today(), time.strptime("03:40:01 PM", "%I:%M:%S %p"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: combine() argument 2 must be datetime.time, not time.struct_time
>>> datetime.datetime.combine(datetime.date.today(), datetime.time.strptime("03:40:01 PM", "%I:%M:%S %p"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.time' has no attribute 'strptime'

如果您只是阅读datetime的文档,或者查看交互式解释器中的help(datetime),您将看到combine方法:

classmethod datetime.combine(date, time)

返回一个新的datetime对象,其日期成分等于给定的date对象,其时间成分和tzinfo属性等于给定的time对象。对于任何datetime对象dd == datetime.combine(d.date(), d.timetz())。如果datedatetime对象,则忽略其时间分量和tzinfo属性。

所以,你不必自己编写方法;它已经在模块中了。

当然,您需要将time_str解析为time对象,但是您显然已经知道如何这样做。


但是如果你真的想要自己写,那么将日期和时间格式化为字符串只是为了解析出来是愚蠢的。为什么不直接访问属性呢?

return datetime(d.year, d.month, d.day, t.hour, t.minute. t.second, t.tzinfo)

相关内容

  • 没有找到相关文章

最新更新