Zags Zags - 2 years ago 148
Python Question

Resolving AmbiguousTimeError from Django's make_aware

I have a code as follows:

from django.utils.timezone import get_current_timezone, make_aware

make_aware(some_datetime, get_current_timezone())

call occasionally raises

AmbiguousTimeError: 2013-11-03 01:23:17

I know from the Django docs that this is a daylight savings problem, and that this timestamp is in fact ambiguous. Now how do i resolve it (say to the first of the two possible times this could be)?

Answer Source

You should avoid naive datetimes in the first place using the following:

from django.utils import timezone
now =

If like me, you have naive times already that you must convert, read on!

The problem is that make_aware just calls timezone.localize, passing None to the argument is_dst:

timezone.localize(value, is_dst=None)

The argument is_dst is specifically what is used to resolve this ambiguous time error (

The solution is to call timezone.localize yourself:

get_current_timezone().localize(some_datetime, is_dst=False)

Having is_dst=False sets it to the first of the two possible times. is_dst=True would be the second.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download