Python timedelta issue with negative values

If you are using Python 2.7 or higher you can use timedelta.total_seconds() to get a float representation of the timedelta as a positive or negative number of seconds.

>>> datetime.timedelta(-1, 86100).total_seconds()
-300.0

You should be able to use this to calculate a number of minutes fairly easily.

If you are not using Python 2.7 you can use the following equivalent formula from the docs:

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10.0**6

Edit: It looks like you are probably using the default string representation for timedelta to display the result, so my original answer may not be as useful. I would suggest something like this for displaying the result:

def get_program_time_budget(self):
    td = self.estimated_duration-self.get_program_duration()
    if td.days < 0:
        return '-' + str(datetime.timedelta() - td)
    return str(td)

This would now return a string instead of a timedelta, and for negative timedeltas it would prepend a ‘-‘ to a positive timedelta.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)