(我是Python和Google App Engine的新手,如果我的问题看起来很基本,请原谅我。)
我正试图在我的Google App Engine应用程序中管理多个用户时区。
以下是我的约束:
我知道时间将在内部存储为带有tzinfo对象的UTC,并且App Engine将以UTC时间存储模型。
我以前认为通过要求用户在他们的偏好中指定他们的时区来解决这个问题。然后,我只需加载他们的首选项并将该tzinfo添加到任何引用该用户的日期时间对象。
然而,我们最近的夏令时打破了它。事实证明我没有在我的tzinfo对象中正确实现dst()。据我了解,我必须确定DST当前是否打开,如果是,则返回tzinfo的正确偏移量。
问题是,我不知道如何确定时区的日光时间是否是最新的。我错过了一些明显的东西吗?
答案 0 :(得分:11)
如果可以,我建议您查看python-dateutil
包,其中包含为所有时区预先构建的tz对象,包括DST偏移信息。我不认为有一种方法可以“只知道”DST是否在没有支持数据的情况下...它是大多数时区的日期驱动(或者至少是支持DST的时区),并且日期因当地而异习俗,政治和各种事物。
答案 1 :(得分:2)
我在这里看到一些问题。
如果用户输入时间,则以当地时区输入,但您如何知道它是哪一个?欧洲/维尔纽斯还是欧洲/马德里?或者澳大利亚/墨尔本?如果您不知道时区,日期/时间将变得“天真”。
唯一被认为是适当且准确(考虑到持续流量状态)的时区数据库是Olson时区数据库,可作为pytz包用于Python。它允许在时区之间轻松转换日期/时间:首先从用户获取日期/时间和时区,在用户的时区中本地化日期/时间,然后将其作为utc,准备保存到您的数据库。显示是另一种方式:从数据库获取日期/时间,在utc中本地化,然后显示为用户时区。
最后一件事:没有自动DST转换这样的东西。如果日期/时间不明确,您必须事先知道输入时间的时区。这是我们的人类现实。