在 Python 3.4 中将 datetime.time 转换为 datetime.timedelta

Posted

技术标签:

【中文标题】在 Python 3.4 中将 datetime.time 转换为 datetime.timedelta【英文标题】:Convert datetime.time into datetime.timedelta in Python 3.4 【发布时间】:2016-05-16 11:06:27 【问题描述】:

我正在尝试转换两个“持续时间”,但是我目前收到一个 TypeError,因为一个是 datetime.timedelta,一个是 datetime.time

TypeError: unorderable types: datetime.time() <= datetime.timedelta()

datetime.time 转换为datetime.timedelta 的有效方法是什么?

我检查了docs,并没有内置方法可以在这两种类型之间进行转换。

【问题讨论】:

【参考方案1】:

datetime.time() 不是持续时间,它是一天中的一个点。如果您想将其解释为持续时间,则将其转换为自午夜以来的持续时间:

datetime.combine(date.min, timeobj) - datetime.min

演示:

>>> from datetime import datetime, date, time
>>> timeobj = time(12, 45)
>>> datetime.combine(date.min, timeobj) - datetime.min
datetime.timedelta(0, 45900)

您可能首先需要检查如何获得datetime.time() 对象,也许从您拥有的输入数据到timedelta() 的路径更短?例如,不要在持续时间中使用datetime.time.strptime()

【讨论】:

感谢您的回答,尽管我确实意识到这不是持续时间,因此我将它放在问题中的引号中。这行得通,谢谢! @R.Murray:同样的想法但更简单:diff = datetime.combine(datetime.min, timeobj) - datetime.min @J.F.Sebastian:好主意,我会借用它并稍作修正(date.min,而是在合并时):-) @MartijnPieters combine() 接受 datetime.min 并且它在概念上更清晰(表达式中的两个位置有相同的对象)。虽然可以使用date.min == datetime.min.date()date.min @J.F.Sebastian:是的,datetime.combine() 确实接受datetime 对象作为任一参数,但我发现date.min 更清晰。【参考方案2】:

这是我找到的一种解决方案,虽然它不一定有效:

import datetime
x = datetime.timedelta(hours=x.hour, minutes=x.minute, seconds=x.second, microseconds=x.microsecond)

其中xdatetime.time 对象。

【讨论】:

以上是关于在 Python 3.4 中将 datetime.time 转换为 datetime.timedelta的主要内容,如果未能解决你的问题,请参考以下文章

在Python 3.4中按日期对字典列表进行排序[重复]

仅在 Python 中将 datetime 对象转换为日期字符串

在 Python 中将 N 秒添加到 datetime.time 的标准方法是啥?

在 Python 中将 datetime 更改为 Unix 时间戳

在 Python 中将日期转换为日期时间

在 python 2.7 中将包含 datetime.timedelta 的 numpy 数组转换为秒的优雅方法