Skip to content

Commit f312c32

Browse files
committed
Fixes wrong behavior for fixed timezones.
1 parent b522d40 commit f312c32

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

pendulum/tz/timezone.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,21 +348,27 @@ def __init__(self, offset, name=None, transition_type=None):
348348
super(FixedTimezone, self).__init__(name, [], [], 0, (datetime(1970, 1, 1),))
349349

350350
self._tzinfos = (TimezoneInfo(self, transition_type),)
351+
self._tzinfo = self._tzinfos[0]
352+
353+
def _normalize(self, dt, dst_rule=Timezone.POST_TRANSITION):
354+
return dt.replace(tzinfo=self._tzinfo)
351355

352356
def utcoffset(self, dt):
353357
if dt is None:
354358
return None
355359

356-
return self._tzinfos[0].utcoffset(dt)
360+
return self._tzinfo.utcoffset(dt)
357361

358362
def dst(self, dt):
359363
if dt is None:
360364
return None
361365

362-
return self._tzinfos[0].dst(dt)
366+
return self._tzinfo.dst(dt)
363367

364368
def fromutc(self, dt):
365-
return dt.replace(tzinfo=self._tzinfos[0])
369+
dt = dt.replace(tzinfo=None)
370+
371+
return (dt + self._tzinfo.adjusted_offset).replace(tzinfo=self._tzinfo)
366372

367373

368374
class _UTC(FixedTimezone):

tests/pendulum_tests/test_add.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from .. import AbstractTestCase
44

5+
import pendulum
56
from datetime import timedelta
67
from pendulum import Pendulum
78

@@ -106,3 +107,11 @@ def test_addition_invalid_type(self):
106107
self.fail()
107108
except TypeError:
108109
pass
110+
111+
def test_add_to_fixed_timezones(self):
112+
dt = pendulum.parse('2015-03-08T01:00:00-06:00')
113+
dt = dt.add(weeks=1)
114+
115+
self.assertPendulum(dt, 2015, 3, 15, 1, 0, 0)
116+
self.assertEqual('-06:00', dt.timezone_name)
117+
self.assertEqual(-6 * 3600, dt.offset)

0 commit comments

Comments
 (0)