Skip to content

Commit 0b1017f

Browse files
committed
Adds support for pytz tzinfo in instance() method
1 parent 886069b commit 0b1017f

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

pendulum/pendulum.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def __init__(self, year, month, day,
178178
@classmethod
179179
def instance(cls, dt, tz=UTC):
180180
"""
181-
Create a Carbon instance from a datetime one.
181+
Create a Pendulum instance from a datetime one.
182182
183183
:param dt: A datetime instance
184184
:type dt: datetime.datetime
@@ -190,6 +190,16 @@ def instance(cls, dt, tz=UTC):
190190
"""
191191
tz = dt.tzinfo or tz
192192

193+
# Checking for pytz/tzinfo
194+
if isinstance(tz, datetime.tzinfo) and not isinstance(tz, TimezoneInfo):
195+
# pytz
196+
if hasattr(tz, 'localize'):
197+
tz = tz.zone
198+
else:
199+
# We have no sure way to figure out
200+
# the timezone name, we raise an error
201+
raise ValueError('Unsupported tzinfo [{}]'.format(tz))
202+
193203
return cls(
194204
dt.year, dt.month, dt.day,
195205
dt.hour, dt.minute, dt.second, dt.microsecond,

tests/pendulum_tests/test_construct.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22

33
import os
4+
import pytz
45
from datetime import datetime
56
from pendulum import Pendulum
67
from pendulum.tz import timezone
@@ -115,6 +116,12 @@ def test_instance_timezone_aware_datetime(self):
115116
now = Pendulum.instance(datetime.now(TimezoneInfo.create(timezone('Europe/Paris'), 7200, True, 'EST')))
116117
self.assertEqual('Europe/Paris', now.timezone_name)
117118

119+
def test_instance_timezone_aware_datetime_pytz(self):
120+
now = Pendulum.instance(
121+
datetime.now(pytz.timezone('Europe/Paris'))
122+
)
123+
self.assertEqual('Europe/Paris', now.timezone_name)
124+
118125
def test_now(self):
119126
now = Pendulum.now()
120127
in_paris = Pendulum.now('Europe/Paris')

0 commit comments

Comments
 (0)