【问题标题】:Getting current time with timezone in python?在python中使用时区获取当前时间?
【发布时间】:2011-07-08 01:02:22
【问题描述】:

我正在使用带有 python 的 Google App Engine。而且我无法安装第三方库。

我虽然这应该工作,但它实际上运行没有错误,但它返回当前时区未应用。

我做错了什么?

from datetime import tzinfo, timedelta, datetime

class Seoul_tzinfo(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=9)
    def dst(self, dt):
        return timedelta(0)

greeting.date = datetime.now( Seoul_tzinfo() )

【问题讨论】:

  • “没有时区”是什么意思。如果只是名称,请尝试定义一个 tzname 方法。
  • @Thomas,我的意思是我得到了未应用 GMT+9 的当前时间。
  • 您可以在 google app engine 上安装第三方库...但是就是说,我不知道 pytz 或 dateutil(这是您需要的)是否有效。
  • @Lennart,谢谢。我不知道我可以将第三方库安装到应用引擎!

标签: python google-app-engine timezone


【解决方案1】:

您需要实现一个 tzinfo 类,并使用所有正确的方法来做您想做的事情。

documentation 表示tzinfo 是一个抽象类,如果要与datetime 对象一起使用,则需要将其制成具有适当方法的具体类。

具体从文档中看一下:

class FixedOffset(tzinfo):
    """Fixed offset in minutes east from UTC."""

    def __init__(self, offset, name):
        self.__offset = timedelta(minutes = offset)
        self.__name = name

    def utcoffset(self, dt):
        return self.__offset

    def tzname(self, dt):
        return self.__name

    def dst(self, dt):
        return ZERO

【讨论】:

  • 我不认为 init & tzname 方法是纯方法。意味着这些方法不是必须实现的。就像@qor72 所做的那样,我的示例代码运行良好。不过感谢您的建议。
【解决方案2】:

我正在运行 python 2.6.5,您的代码似乎运行良好。我调整了它以输出我的当地时间和你的时间调整一个;

$ python test.py
Local: 2011-03-03 08:53:43.514784
Adj: 2011-03-03 22:53:43.514784+09:00

您确定这与您的问候语课程无关吗?

【讨论】:

  • 谢谢。我只是python的新手。这真的有助于缩小我的问题!
【解决方案3】:

您是在谈论从数据库中获取实体的时间吗?如果是这样,appengine 将所有 dt 属性存储在 UTC 中;当你 put() 时,它只是丢弃 tz 信息。最明智的做法是将您的 dt 转换为 UTC(使用 astimezone()),并在您从数据存储区获取它时转换回来。

(见http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#DateTimeProperty

【讨论】:

  • 我猜就是这样!我已经多次阅读该文档,但我错过了一行。我一直在尝试将本地时间保存到数据库并在获取它们后立即显示值。获取数据后我会尝试更改时间。谢谢!
猜你喜欢
  • 2014-11-08
  • 2019-12-15
  • 2015-03-23
  • 2017-09-18
  • 1970-01-01
  • 2017-04-30
  • 2017-08-02
相关资源
最近更新 更多