summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomi Pieviläinen <tomi.pievilainen+launchpad@iki.fi>2012-02-19 00:16:26 +0200
committerTomi Pieviläinen <tomi.pievilainen+launchpad@iki.fi>2012-02-19 00:16:26 +0200
commitb6993d02819b4f927d76c15613d6648fa416bad3 (patch)
treecb6c42fe38cedb613b837f84bc6fb2d8b8b7353d
parentf21920abb2739e37b97669b2b5c303b80f611858 (diff)
downloaddateutil-b6993d02819b4f927d76c15613d6648fa416bad3.tar.gz
Fix relativedelta arithmetics
-rw-r--r--dateutil/relativedelta.py18
-rwxr-xr-xtest.py8
2 files changed, 18 insertions, 8 deletions
diff --git a/dateutil/relativedelta.py b/dateutil/relativedelta.py
index a1b8929..67de55e 100644
--- a/dateutil/relativedelta.py
+++ b/dateutil/relativedelta.py
@@ -367,13 +367,13 @@ Here is the behavior of operations with relativedelta:
def __mul__(self, other):
f = float(other)
- return relativedelta(years=self.years*f,
- months=self.months*f,
- days=self.days*f,
- hours=self.hours*f,
- minutes=self.minutes*f,
- seconds=self.seconds*f,
- microseconds=self.microseconds*f,
+ return relativedelta(years=int(self.years*f),
+ months=int(self.months*f),
+ days=int(self.days*f),
+ hours=int(self.hours*f),
+ minutes=int(self.minutes*f),
+ seconds=int(self.seconds*f),
+ microseconds=int(self.microseconds*f),
leapdays=self.leapdays,
year=self.year,
month=self.month,
@@ -384,6 +384,8 @@ Here is the behavior of operations with relativedelta:
second=self.second,
microsecond=self.microsecond)
+ __rmul__ = __mul__
+
def __eq__(self, other):
if not isinstance(other, relativedelta):
return False
@@ -416,6 +418,8 @@ Here is the behavior of operations with relativedelta:
def __div__(self, other):
return self.__mul__(1/float(other))
+ __truediv__ = __div__
+
def __repr__(self):
l = []
for attr in ["years", "months", "days", "leapdays",
diff --git a/test.py b/test.py
index b705343..eda613e 100755
--- a/test.py
+++ b/test.py
@@ -157,9 +157,15 @@ class RelativeDeltaTest(unittest.TestCase):
c = a+b
self.assertEqual(c.microsecond, b.microsecond)
- def test28Days(self):
+ def testMultiplication(self):
self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=1) * 28,
datetime(2000, 1, 29))
+ self.assertEqual(datetime(2000, 1, 1) + 28 * relativedelta(days=1),
+ datetime(2000, 1, 29))
+
+ def testDivision(self):
+ self.assertEqual(datetime(2000, 1, 1) + relativedelta(days=28) / 28,
+ datetime(2000, 1, 2))
class RRuleTest(unittest.TestCase):