Python tzinfo和夏令时

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

我在Google App Engine应用程序中尝试管理多个用户时区时非常忙碌。

这是我的约束:

  • 如果用户在输入上输入时间,它将是当地时间(在适当时包括DST)。
  • 如果用户没有输入时间,则系统必须在当地时间为他们输入时间(适当时包括DST)。
  • 当日期和时间显示给用户时,它必须在当地时间(适当时包括DST)
  • 我知道时间将在tzinfo对象内部存储为UTC,App Engine将使用UTC时间存储模型。

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

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

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


    如果可以的话,我建议查看python-dateutil软件包,该软件包包含预先为所有时区构建的tz对象,包括DST偏移量信息。 我认为如果没有支持数据的话,DST是否开启就没有办法“知道”......这是大多数时区(或至少支持DST的时区)的日期驱动,并且日期根据本地习俗,政治和各种事物。

    http://labix.org/python-dateutil


    我在这里看到一些问题。

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

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

    最后一件事:没有自动DST转换的事情。 在模糊日期/时间的情况下,您必须事先知道输入时间的时区。 这是我们人类的现实。

    链接地址: http://www.djcxy.com/p/29353.html

    上一篇: Python tzinfo and daylight time

    下一篇: What is the best way to store DateTime?