正在加载...

如何在GAE中使用pytz模块

作者:混沌 十二月 8th, 2009

pytz是一个关于时区问题的Python工具包.  那么如何在GAE上使用呢?  如果你想把pytz打成zip包然后调用,那么此文可能值得你看看.

1)下载最新版本:  pytz-2009r.zip  找出子目录pytz ,再将pytz中的tests目录删除,然后将 *.pyc文件全部删除 . 最后将pytz目录压缩成 pytz.zip .至于为何要压缩,GAE用户自然明白是何道理.

2)在GAE中使用时先导入:

import sys
sys.path.insert(0, 'pytz.zip')

3)然后(这是关键点), 将pytz模块中的函数open_resource置换掉,因为在GAE平台中,在压缩包中执行open_resource这个代码会报错. 置换的方法是:

import pytz
from zipfile import ZipFile
from cStringIO import StringIO
def open_resource(name):
      name_parts = name.lstrip('/').split('/')
      for part in name_parts:
            if part == os.path.pardir or os.path.sep in part:
                  raise ValueError('Bad path segment: %r' % part)
      zonedata = ZipFile('pytz.zip').read('pytz/'+os.path.join('zoneinfo',*name_parts))
      return StringIO(zonedata)
pytz.open_resource = open_resource

4)最后你就可以参考pytz官方文档使用了.

补充: 

   为了方便, 可以下载pytz在GAE中zip加载方式的补丁代码.  http://ghscheck.chaoskey.cn/pytzpatch.py 

  使用方法:

     1)  pytz.zip 和  其补丁代码pytzpatch.py ,都建议放在  项目根目录.

     2) 调用代码示例:

import sys
sys.path.insert(0, 'pytz.zip')

from datetime import datetime
import pytz
import pytzpatch


cntz = pytz.timezone('Asia/Shanghai')
print datetime.now(cntz).strftime('%Y-%m-%d %H:%M:%S')

MOKO刘雨晴

相关阅读:

我要留言

麻烦,计算一下:4+6