|
1 |
| -from datetime import datetime, timedelta |
| 1 | +from datetime import date, datetime, timedelta |
2 | 2 |
|
3 | 3 | from pandas.tseries.tools import to_datetime
|
4 | 4 |
|
@@ -180,17 +180,29 @@ def __rmul__(self, someInt):
|
180 | 180 | def __neg__(self):
|
181 | 181 | return self.__class__(-self.n, **self.kwds)
|
182 | 182 |
|
183 |
| - def rollback(self, someDate): |
| 183 | + def rollback(self, dt): |
184 | 184 | """Roll provided date backward to next offset only if not on offset"""
|
185 |
| - if not self.onOffset(someDate): |
186 |
| - someDate = someDate - self.__class__(1, **self.kwds) |
187 |
| - return someDate |
| 185 | + try: |
| 186 | + if not self.onOffset(dt): |
| 187 | + dt = dt - self.__class__(1, **self.kwds) |
| 188 | + return dt |
| 189 | + except Exception: |
| 190 | + if isinstance(dt, date): |
| 191 | + return self.rollback(datetime(dt.year, dt.month, dt.day)) |
| 192 | + else: |
| 193 | + raise |
188 | 194 |
|
189 | 195 | def rollforward(self, dt):
|
190 | 196 | """Roll provided date forward to next offset only if not on offset"""
|
191 |
| - if not self.onOffset(dt): |
192 |
| - dt = dt + self.__class__(1, **self.kwds) |
193 |
| - return dt |
| 197 | + try: |
| 198 | + if not self.onOffset(dt): |
| 199 | + dt = dt + self.__class__(1, **self.kwds) |
| 200 | + return dt |
| 201 | + except Exception: |
| 202 | + if isinstance(dt, date): |
| 203 | + return self.rollforward(datetime(dt.year, dt.month, dt.day)) |
| 204 | + else: |
| 205 | + raise |
194 | 206 |
|
195 | 207 | def onOffset(self, dt):
|
196 | 208 | if type(self) == DateOffset:
|
|
0 commit comments