简体   繁体   English

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

[英]Convert datetime.time into datetime.timedelta in Python 3.4

I am trying to convert two "durations", however I am currently receiving a TypeError due to one being a datetime.timedelta and one being a datetime.time : 我正在尝试转换两个“持续时间”,但是由于一个是datetime.timedelta ,另一个是datetime.time ,我目前正在收到TypeError

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

What is an efficient way to convert a datetime.time to a datetime.timedelta ? 什么是一个转换的有效方式datetime.timedatetime.timedelta

I have checked the docs and there is no built-in method for conversion between these two types. 我已经检查了文档 ,这两种类型之间没有内置的转换方法。

datetime.time() is not a duration , it is a point in a day. datetime.time() 不是持续时间 ,而是一天中的一点。 If you want to interpret it as a duration, then convert it to a duration since midnight: 如果要将其解释为持续时间,请将其转换为午夜以来的持续时间:

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

Demo: 演示:

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

You may need to examine how you get the datetime.time() object in the first place though, perhaps there is a shorter path to a timedelta() from the input data you have? 但是,您可能首先需要检查如何获取datetime.time()对象,也许从输入数据中timedelta()路径更短? Don't use datetime.time.strptime() for durations, for example. 例如,请勿将datetime.time.strptime()用于持续时间。

Here's one solution I've found, though it's not necessarily efficient: 这是我发现的一种解决方案,尽管不一定有效:

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

Where x is a datetime.time object. 其中xdatetime.time对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM