Convert datetime.time into datetime.timedelta in Python 3.4

24,140

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.

Share:
24,140

Related videos on Youtube

Rob Murray
Author by

Rob Murray

Computer Science undergraduate at the University of Warwick.

Updated on February 09, 2020

Comments

  • Rob Murray
    Rob Murray about 4 years

    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:

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

    What is an efficient way to convert a datetime.time to a datetime.timedelta?

    I have checked the docs and there is no built-in method for conversion between these two types.

  • Rob Murray
    Rob Murray about 8 years
    Thanks 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
    jfs about 8 years
    @R.Murray: same idea but simpler: diff = datetime.combine(datetime.min, timeobj) - datetime.min
  • Martijn Pieters
    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
    jfs about 8 years
    @MartijnPieters combine() accepts datetime.min and it is conceptually cleaner (same object in two places in the expression). Though date.min == datetime.min.date() and therefore date.min may be used.
  • Martijn Pieters
    Martijn Pieters about 8 years
    @J.F.Sebastian: Yes, datetime.combine() indeed accepts a datetime object for either argument, but I find date.min is clearer.