Convert datetime.time into datetime.timedelta in Python 3.4
Solution 1
datetime.time()
is not a duration, it is a point in a day. 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? Don't use datetime.time.strptime()
for durations, for example.
Solution 2
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.
Related videos on Youtube
Rob Murray
Computer Science undergraduate at the University of Warwick.
Updated on February 09, 2020Comments
-
Rob Murray about 4 years
I am trying to convert two "durations", however I am currently receiving a
TypeError
due to one being adatetime.timedelta
and one being adatetime.time
:TypeError: unorderable types: datetime.time() <= datetime.timedelta()
What is an efficient way to convert a
datetime.time
to adatetime.timedelta
?I have checked the docs and there is no built-in method for conversion between these two types.
-
Rob Murray about 8 yearsThanks for your answer, though I did realise it wasn't a duration, hence why I put it in quotes in the question. This works, thanks!
-
jfs about 8 years@R.Murray: same idea but simpler:
diff = datetime.combine(datetime.min, timeobj) - datetime.min
-
Martijn Pieters about 8 years@J.F.Sebastian: great idea, I'll just nic^Wborrow that with a small correction (
date.min
rather, when combining) :-) -
jfs about 8 years@MartijnPieters
combine()
acceptsdatetime.min
and it is conceptually cleaner (same object in two places in the expression). Thoughdate.min == datetime.min.date()
and thereforedate.min
may be used. -
Martijn Pieters about 8 years@J.F.Sebastian: Yes,
datetime.combine()
indeed accepts adatetime
object for either argument, but I finddate.min
is clearer.