I get this strange result by substracting earlier time stamp for later one:

pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')


Timedelta('-1 days +23:58:00')

Expected Output:

Timedelta('-0 days 00:02:00')

What is the correct way to calculate a negative time difference? Thank you!


Timedelta('-1 days +23:58:00') is the proper representation of a negative time difference in pandas (and also in pure python)

# using pure python
from datetime import datetime
datetime(2021,5,21,6,0,0) - datetime(2021,5,21,6,2,0)
datetime.timedelta(days=-1, seconds=86280)

this is because the difference is properly calculated as -120 seconds, but individual time elements cannot exceed their moduli. the timedelta components are normalized. To represent negative 2 minutes, a negative day & positive time component are used.

from the python datetime module’s documentation

and days, seconds and microseconds are then normalized so that the representation is unique, with

  • 0 <= microseconds < 1000000
  • 0 <= seconds < 3600*24 (the number of seconds in one day)
  • -999999999 <= days <= 999999999

Note that normalization of negative values may be surprising at first. For example:

from datetime import timedelta
d = timedelta(microseconds=-1)
(d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)

it is possible to retrieve the total seconds as a negative integer using the method Timedelta.total_seconds

Source: https://stackoverflow.com/q/67637790

172 2 2 0