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

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

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

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

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

【问题讨论】:

    标签: python python-3.x datetime time timedelta


    【解决方案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 对象。

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2017-12-03
      • 1970-01-01
      • 2012-12-20
      • 2015-01-25
      • 2013-06-03
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多