在 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)
其中x
是datetime.time
对象。
【讨论】:
以上是关于在 Python 3.4 中将 datetime.time 转换为 datetime.timedelta的主要内容,如果未能解决你的问题,请参考以下文章
仅在 Python 中将 datetime 对象转换为日期字符串
在 Python 中将 N 秒添加到 datetime.time 的标准方法是啥?