4

(我是 Python 和 Google App Engine 的新手,如果我的问题看起来很基础,请原谅我)。

我正忙着在我的 Google App Engine 应用程序中管理多个用户时区。

这是我的限制:

  1. 如果用户在输入中输入时间,它将是本地时间(包括 DST,在适当的时候)。
  2. 如果用户没有输入时间,系统必须为他们输入当地时间(包括 DST,在适当的时候)。
  3. 当向用户显示日期和时间时,它必须是他们的本地时间(包括 DST,在适当的时候)

我知道时间将在内部存储为带有 tzinfo 对象的 UTC,并且 App Engine 将使用 UTC 时间存储模型。

我以前认为我已经通过要求用户在他们的偏好中指定他们的时区来解决这一切。然后,我只需加载他们的首选项并将该 tzinfo 添加到引用该用户的任何日期时间对象中。

然而,我们最近的夏令时打破了它。事实证明,我没有在我的 tzinfo 对象中正确实现 dst() 。据我了解,我必须确定 DST 当前是否打开,如果是,则返回 tzinfo 的正确偏移量。

问题是,我不知道如何确定时区的夏令时是否是当前时间。我错过了一些明显的东西吗?

4

2 回答 2

11

如果可以的话,我建议你看看这个python-dateutil包,它为所有时区预先构建了 tz 对象,包括 DST 偏移信息。我认为没有办法在没有支持数据的情况下“只知道”DST 是否开启......它是大多数时区(或至少支持 DST 的时区)的日期驱动,并且日期因当地而异风俗、政治和各种事物。

http://labix.org/python-dateutil

于 2009-03-10T16:21:35.100 回答
2

我在这里看到了一些问题。

如果用户输入时间,它是在本地时区输入的,但是你怎么知道它是哪一个呢?欧洲/维尔纽斯还是欧洲/马德里?或者也许是澳大利亚/墨尔本?如果您不知道时区,日期/时间就会变得“幼稚”。

唯一被认为合适且准确的时区数据库(考虑到不断变化的状态)是 Olson timezone db,可用于 Python 作为pytz包。它允许在时区之间轻松转换日期/时间:首先您从用户那里获取日期/时间和时区,在用户的时区中本地化日期/时间,然后将其作为 utc,准备保存到您的数据库。显示是其他方式:从数据库中获取日期/时间,以 utc 本地化,然后显示为用户时区。

最后一件事:没有自动 DST 转换之类的东西。在日期/时间不明确的情况下,您必须提前知道输入时间的时区。这就是我们人类的现实。

于 2009-03-10T21:24:29.833 回答