GAE玩了有一段时间了,现在突然发现在GAE的python应用中,获取的时间是UTC时间,但我清楚记得,之前获取的时间是本地时间啊!!
一个应用应该有一个时间参考点的,大多数应用应该是以本地时间为参考点。
python2.5中:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 5, 26, 20, 18, 2, 593000)
>>> datetime.datetime.now(8)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: tzinfo argument must be None or of a tzinfo subclass, not type 'int'
可以看出,传入的参数tz要为datetime.tzinfo的子类或者None。但是datetime.tzinfo是个抽象类,不能实例化。
用python第三方包轻易搞定:
>>> import pytz
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 5, 26, 20, 23, 12, 109000)
>>> datetime.datetime.now(pytz.utc)
datetime.datetime(2009, 5, 26, 12, 23, 23, 500000, tzinfo=<UTC>)
>>> datetime.datetime.now(pytz.timezone(pytz.country_timezones('cn')[2]))
datetime.datetime(2009, 5, 26, 20, 24, 9, 296000, tzinfo=<DstTzInfo 'Asia/Chongqing' CST+8:00:00 STD>)
>>> pytz.country_timezones('cn')
['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']
>>>
主要是datetime.datetime.now(tz)的tz参数构造。
为了减小第三方包的体积,可先压缩后加入sys.path中就ok了。
如:
pytzpy2.5-2006.zip中包含pytz文件夹
pytz_path = r'd:/applit/python/pytzpy2.5-2006.zip'
import sys
sys.insert(0, pytz_path)