'Subtract two datetimes, or a datetime and a timedelta.'

def __sub__(self, other):

    if (not isinstance(other, datetime)):
        if isinstance(other, timedelta):
            return (self + (- other))
        return NotImplemented
    days1 = self.toordinal()
    days2 = other.toordinal()
    secs1 = ((self._second + (self._minute * 60)) + (self._hour * 3600))
    secs2 = ((other._second + (other._minute * 60)) + (other._hour * 3600))
    base = timedelta((days1 - days2), (secs1 - secs2), (self._microsecond - other._microsecond))
    if (self._tzinfo is other._tzinfo):
        return base
    myoff = self.utcoffset()
    otoff = other.utcoffset()
    if (myoff == otoff):
        return base
    if ((myoff is None) or (otoff is None)):
        raise TypeError('cannot    mix    naive    and    timezone-aware    time')
    return ((base + otoff) - myoff)
