如何在Python中获取当前时区时间?
我正在使用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)