|
@@ -16,7 +16,7 @@ from datetime import date, datetime, timedelta, tzinfo
|
|
|
|
|
|
from kombu.utils import cached_property, reprcall
|
|
|
|
|
|
-from pytz import timezone as _timezone
|
|
|
+from pytz import timezone as _timezone, AmbiguousTimeError
|
|
|
|
|
|
from celery.five import string_t
|
|
|
|
|
@@ -266,23 +266,31 @@ def is_naive(dt):
|
|
|
def make_aware(dt, tz):
|
|
|
"""Sets the timezone for a datetime object."""
|
|
|
try:
|
|
|
- localize = tz.localize
|
|
|
+ _localize = tz.localize
|
|
|
except AttributeError:
|
|
|
return dt.replace(tzinfo=tz)
|
|
|
else:
|
|
|
# works on pytz timezones
|
|
|
- return localize(dt, is_dst=None)
|
|
|
+ try:
|
|
|
+ return _localize(dt, is_dst=None)
|
|
|
+ except AmbiguousTimeError:
|
|
|
+ return min(_localize(dt, is_dst=True),
|
|
|
+ _localize(dt, is_dst=False))
|
|
|
|
|
|
|
|
|
def localize(dt, tz):
|
|
|
"""Convert aware datetime to another timezone."""
|
|
|
dt = dt.astimezone(tz)
|
|
|
try:
|
|
|
- normalize = tz.normalize
|
|
|
- except AttributeError:
|
|
|
+ _normalize = tz.normalize
|
|
|
+ except AttributeError: # non-pytz tz
|
|
|
return dt
|
|
|
else:
|
|
|
- return normalize(dt) # pytz
|
|
|
+ try:
|
|
|
+ return _normalize(dt, is_dst=None)
|
|
|
+ except AmbiguousTimeError:
|
|
|
+ return min(_normalize(dt, is_dst=True),
|
|
|
+ _normalize(dt, is_dst=False))
|
|
|
|
|
|
|
|
|
def to_utc(dt):
|