Author: Brian Kearns <[email protected]>
Branch:
Changeset: r80920:629f1bffad53
Date: 2015-11-24 18:39 -0500
http://bitbucket.org/pypy/pypy/changeset/629f1bffad53/
Log: optimize datetime - timedelta
diff --git a/lib_pypy/datetime.py b/lib_pypy/datetime.py
--- a/lib_pypy/datetime.py
+++ b/lib_pypy/datetime.py
@@ -1824,22 +1824,24 @@
return -1
return diff and 1 or 0
+ def _add_timedelta(self, other, factor):
+ t = _tmxxx(self._year,
+ self._month,
+ self._day + other.days * factor,
+ self._hour,
+ self._minute,
+ self._second + other.seconds * factor,
+ self._microsecond + other.microseconds * factor)
+ self._checkOverflow(t.year)
+ return datetime(t.year, t.month, t.day,
+ t.hour, t.minute, t.second,
+ t.microsecond, tzinfo=self._tzinfo)
+
def __add__(self, other):
"Add a datetime and a timedelta."
if not isinstance(other, timedelta):
return NotImplemented
- t = _tmxxx(self._year,
- self._month,
- self._day + other.days,
- self._hour,
- self._minute,
- self._second + other.seconds,
- self._microsecond + other.microseconds)
- self._checkOverflow(t.year)
- result = datetime(t.year, t.month, t.day,
- t.hour, t.minute, t.second,
- t.microsecond, tzinfo=self._tzinfo)
- return result
+ return self._add_timedelta(other, 1)
__radd__ = __add__
@@ -1847,7 +1849,7 @@
"Subtract two datetimes, or a datetime and a timedelta."
if not isinstance(other, datetime):
if isinstance(other, timedelta):
- return self + -other
+ return self._add_timedelta(other, -1)
return NotImplemented
delta_d = self.toordinal() - other.toordinal()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit