- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个代码如下:
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 开始,如果您对 timezone support 使用 zoneinfo
(这是 Django 4 中的默认设置)您无需执行任何操作即可使用 make_aware
来避免此错误。 make_aware 的 is_dst
标志在 Django 4 中已弃用,并将在 Django 5 中删除。
您可以使用以下 (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)
问题是 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/
Django docs说: The pytz.NonExistentTimeError exception is raised if you try to make value aware durin
我有一个代码如下: from django.utils.timezone import get_current_timezone, make_aware make_aware(some_datetim
我正在使用 django 1.11 和 pytz 2018.6 我在理解 Django 如何处理 DST 时遇到了一些问题。 我的主要问题是在 America/Sao_Paulo 时区中本地化日期 2
我发现了一些奇怪的事情。这里有一些例子。 from django.utils import timezone value = u'2014-10-26 01:45:00' #I know that a
我是一名优秀的程序员,十分优秀!