如何在Python中获取当前时区时间?

4 投票
3 回答
5648 浏览
提问于 2025-04-16 12:55

我正在使用Google App Engine和Python,但我无法安装第三方库。

我以为这样做应该没问题,但实际上它运行没有错误,但返回的当前时间没有应用时区。

我哪里做错了呢?

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() )

3 个回答

1

我正在使用 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

你确定这不是跟你的问候类有关的问题吗?

3

你需要实现一个 tzinfo 类,并且要包含所有必要的方法,这样才能完成你想做的事情。

根据文档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
3

你是在说从数据库里取出数据的时候吗?如果是这样的话,appengine会把所有的日期时间属性都存储为协调世界时间(UTC);当你使用put()方法时,它会直接丢掉时区信息。最聪明的做法是把你的日期时间转换成UTC(可以用astimezone()这个方法),然后在从数据存储中取出时再转换回来。

(参考链接:http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#DateTimeProperty)

撰写回答