gpt4 book ai didi

python - 从 Django 的 make_aware 解决 AmbiguousTimeError

转载 作者:太空狗 更新时间:2023-10-29 17:56:48 24 4
gpt4 key购买 nike

我有一个代码如下:

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 文档中知道这是一个夏令时问题,而且这个时间戳实际上是不明确的。现在我该如何解决它(比如这可能是两个可能时间中的第一个)?

最佳答案

预防药

您应该首先使用以下方法避免天真的日期时间:

from django.utils import timezone
now = timezone.now()

如果像我一样,您已经有过天真的时候了,您必须改过自新,请继续阅读!

Django 4+:

从 Django 4 开始,如果您对 timezone support 使用 zoneinfo (这是 Django 4 中的默认设置)您无需执行任何操作即可使用 make_aware 来避免此错误。 make_aware 的 is_dst 标志在 Django 4 中已弃用,并将在 Django 5 中删除。

Django 1.9 - 3.2:

您可以使用以下 (thanks to GeyseR) 解决 AmbiguousTimeError:

from django.utils import timezone

# This uses `settings.TIME_ZONE` unless you call `timezone.activate()`
timezone.make_aware(some_datetime, is_dst=False)

Django 1.x - 1.8:

问题是 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 将是第二个。

关于python - 从 Django 的 make_aware 解决 AmbiguousTimeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com