我的代码如下:
from django.utils.timezone import get_current_timezone, make_aware
make_aware(some_datetime, get_current_timezone())
make_aware
来电偶尔会引发
AmbiguousTimeError: 2013-11-03 01:23:17
我从Django文档中了解到这是一个夏令时问题,而且这个时间戳实际上是模棱两可的。现在我该如何解决它(比如这可能是两个可能的时间中的第一个)?
答案 0 :(得分:15)
您应该首先使用以下内容避免天真的日期时间:
from django.utils import timezone
now = timezone.now()
如果像我一样,你已经有天真的时间,你必须转换,请继续阅读!
您可以使用以下(thanks to GeyseR)来解决AmbiguousTimeError:
make_aware(some_datetime, get_current_timezone(), is_dst=False)
问题是make_aware只调用timezone.localize,将None传递给参数is_dst:
timezone.localize(value, is_dst=None)
参数is_dst具体用于解决此模糊时间错误(http://pytz.sourceforge.net/#tzinfo-api)。
解决方案是自己调用timezone.localize:
get_current_timezone().localize(some_datetime, is_dst=False)
将is_dst = False设置为两次可能的第一次。 is_dst = True将是第二个。
答案 1 :(得分:2)
对于搜索此错误的人:
在您的Django代码中,替换:
today = datetime.datetime.today()
与
from django.utils import timezone
today = timezone.now()
答案 2 :(得分:2)
由于django 1.9 make_aware实用程序函数有is_dst
参数。
所以你可以用它来解决AmbiguousTimeError异常:
from django.utils.timezone import get_current_timezone, make_aware
make_aware(some_datetime, get_current_timezone(), is_dst=True)
或
make_aware(some_datetime, get_current_timezone(), is_dst=False)
django docs中的相关部分:https://docs.djangoproject.com/en/1.9/ref/utils/#django.utils.timezone.make_aware