Django公司时区。让你知道20141026 1:45:00的模糊度误差

2024-10-06 15:16:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现了一些奇怪的东西。这里有一些例子。在

from django.utils import timezone
value = u'2014-10-26 01:45:00'
#I know that a variable has  'Europe / Moscow' timezone. Let's tell Django about it.
TZ = timezone.pytz.timezone('Europe/Moscow')
d = timezone.datetime.strptime(value,'%Y-%m-%d %H:%M:%S')
print timezone.make_aware(d,TZ)
#raised AmbiguousTimeError: 2014-10-26 01:45:00

然后乐趣开始了

^{pr2}$

因此,在2014-10-26 00:59:00和2014-10-26 02:00:00之间产生了模糊性误差

为什么?怎么解决呢?在


Tags: djangofromimportthatvalueutilsvariable例子
2条回答

timezon.make_aware(d, TZ)相当于TZ.localize(d, is_dst=None),它会在不明确的时间引起错误:2014-10-26 01:45:00在欧洲/莫斯科时区发生两次:

# Europe/Moscow               UTC                           timestamp
2014-10-26 00:45:00 MSK+0400; 2014-10-25 20:45:00 UTC+0000; 1414269900
2014-10-26 01:00:00 MSK+0400; 2014-10-25 21:00:00 UTC+0000; 1414270800
2014-10-26 01:15:00 MSK+0400; 2014-10-25 21:15:00 UTC+0000; 1414271700
2014-10-26 01:30:00 MSK+0400; 2014-10-25 21:30:00 UTC+0000; 1414272600
2014-10-26 01:45:00 MSK+0400; 2014-10-25 21:45:00 UTC+0000; 1414273500
2014-10-26 01:15:00 MSK+0300; 2014-10-25 22:15:00 UTC+0000; 1414275300
2014-10-26 01:30:00 MSK+0300; 2014-10-25 22:30:00 UTC+0000; 1414276200
2014-10-26 01:45:00 MSK+0300; 2014-10-25 22:45:00 UTC+0000; 1414277100
2014-10-26 02:00:00 MSK+0300; 2014-10-25 23:00:00 UTC+0000; 1414278000

注意:utc偏移量在凌晨2点(Федеральный закон от 21 июля 2014 г. N 248-ФЗ)从+0400更改为+0300。在

为了避免异常,您可以调用TZ.localize(d)(注意:no is_dst=None),它对现有的非歧义时间正常,但对于不存在或不明确的时间,可能会失败(返回错误的答案)。在

如果pytz Bug #1378150: Enhance support for end-of-DST-like ambiguous time是固定的,那么可以使用TZ.localize(d, is_dst=True)TZ.localize(d, is_dst=False)来获得相应的转换前后的时间。在

如果错误没有修复,您可以使用我的答案从Parsing of Ordered Timestamps in Local Time (to UTC) While Observing Daylight Saving Time获得转换后的时间:

^{pr2}$

因为夏令时。在

10月26日凌晨2点,莫斯科人将把时钟拨回一小时。这意味着他们将看到,例如,在那天凌晨1:30两次。所以凌晨1:00到2:00之间的时间是不明确的,Python/pytz就是这么说的。在

如何处理这个问题将取决于具体的应用程序。你需要决定你说的是哪一个凌晨1:30(即你说的是哪一个UTC时间)。在

(显然,这是大多数俄罗斯人最后一年会与DST打交道。请参阅this article了解一些有趣的背景。)

相关问题 更多 >