Skip to content

Commit ce1ff8a

Browse files
committed
Fixes parsing of datetime with offset.
1 parent ce1eb27 commit ce1ff8a

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

pendulum/pendulum.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from pytz.tzinfo import BaseTzInfo, tzinfo
1515
from dateutil.relativedelta import relativedelta
1616
from dateutil import parser as dateparser
17+
from dateutil.tz import tzoffset
1718

1819
from .translator import Translator
1920

@@ -201,6 +202,12 @@ def parse(cls, time=None, tz=pytz.UTC):
201202
if not dt:
202203
raise PendulumException('Invalid time string "{}"'.format(time))
203204

205+
if dt.tzinfo:
206+
if isinstance(dt.tzinfo, tzoffset):
207+
tz = int(dt.tzinfo.utcoffset(None).total_seconds() / 3600)
208+
else:
209+
tz = tzinfo
210+
204211
return cls(
205212
dt.year, dt.month, dt.day,
206213
dt.hour, dt.minute, dt.second, dt.microsecond,

tests/pendulum_tests/test_construct.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ def test_parse_with_default_timezone(self):
3535
p = Pendulum.parse('now')
3636
self.assertEqual('America/Toronto', p.timezone_name)
3737

38+
def test_parse_with_offset_in_string(self):
39+
p = Pendulum.parse('2016-04-15T18:21:08.7454873-05:00')
40+
self.assertPendulum(p, 2016, 4, 15, 18, 21, 8)
41+
self.assertIsNone(p.timezone_name)
42+
self.assertEqual(-18000, p.offset)
43+
3844
def test_setting_timezone(self):
3945
timezone = 'Europe/London'
4046
dtz = pytz.timezone(timezone)

0 commit comments

Comments
 (0)