## 5.1.2 timedelta Objects

A timedelta object represents a duration, the difference between two dates or times.

 class timedelta( [days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
All arguments are optional and default to `0`. Arguments may be ints, longs, or floats, and may be positive or negative.

Only days, seconds and microseconds are stored internally. Arguments are converted to those units:

• A millisecond is converted to 1000 microseconds.
• A minute is converted to 60 seconds.
• An hour is converted to 3600 seconds.
• A week is converted to 7 days.

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`

If any argument is a float and there are fractional microseconds, the fractional microseconds left over from all arguments are combined and their sum is rounded to the nearest microsecond. If no argument is a float, the conversion and normalization processes are exact (no information is lost).

If the normalized value of days lies outside the indicated range, OverflowError is raised.

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

```>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
```

Class attributes are:

min
The most negative timedelta object, `timedelta(-999999999)`.

max
The most positive timedelta object, ```timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)```.

resolution
The smallest possible difference between non-equal timedelta objects, `timedelta(microseconds=1)`.

Note that, because of normalization, `timedelta.max` > `-timedelta.min`. `-timedelta.max` is not representable as a timedelta object.

Attribute Value
`days` Between -999999999 and 999999999 inclusive
`seconds` Between 0 and 86399 inclusive
`microseconds` Between 0 and 999999 inclusive

Supported operations:

Operation Result
`t1 = t2 + t3` Sum of t2 and t3. Afterwards t1-t2 == t3 and t1-t3 == t2 are true. (1)
`t1 = t2 - t3` Difference of t2 and t3. Afterwards t1 == t2 - t3 and t2 == t1 + t3 are true. (1)
`t1 = t2 * i or t1 = i * t2` Delta multiplied by an integer or long. Afterwards t1 // i == t2 is true, provided `i != 0`.
In general, t1 * i == t1 * (i-1) + t1 is true. (1)
`t1 = t2 // i` The floor is computed and the remainder (if any) is thrown away. (3)
`+t1` Returns a timedelta object with the same value. (2)
`-t1` equivalent to timedelta(-t1.days, -t1.seconds, -t1.microseconds), and to t1* -1. (1)(4)
`abs(t)` equivalent to +t when `t.days >= 0`, and to -t when `t.days < 0`. (2)
Notes:

(1)
This is exact, but may overflow.

(2)
This is exact, and cannot overflow.

(3)
Division by 0 raises ZeroDivisionError.

(4)
-timedelta.max is not representable as a timedelta object.

In addition to the operations listed above timedelta objects support certain additions and subtractions with date and datetime objects (see below).

Comparisons of timedelta objects are supported with the timedelta object representing the smaller duration considered to be the smaller timedelta. In order to stop mixed-type comparisons from falling back to the default comparison by object address, when a timedelta object is compared to an object of a different type, TypeError is raised unless the comparison is `==` or `!=`. The latter cases return False or True, respectively.

timedelta objects are hashable (usable as dictionary keys), support efficient pickling, and in Boolean contexts, a timedelta object is considered to be true if and only if it isn't equal to `timedelta(0)`.