在我的调试器下:
logging.info("TZ = %s -- It is now: %s", os.environ['TZ'], time.ctime())
TZ = UTC -- It is now: Mon Oct 17 12:10:44 2011
在App Engine Launcher下:
logging.info("TZ = %s -- It is now: %s", os.environ['TZ'], time.ctime())
TZ = UTC -- It is now: Mon Oct 17 17:09:24 2011
那么我设置错了什么?这不仅影响time.ctime(),而且还影响到调试数据库中的所有数据。我希望调试器在与应用程序引擎启动器相同的“时间范围”中运行,因为数据库中的时间戳,并且调试器比启动器慢,所以我不想一直使用它。
答案 0 :(得分:5)
问题在于,使用Python 2.5的Windows上的C运行时函数似乎在第一次调用时间或ctime时缓存TZ环境变量的值。以下将以当地时间而不是UTC显示时间:
import time, os
time.time()
os.environ['TZ'] = 'UTC'
print time.ctime()
Wing的调试器在运行任何AppEngine代码之前调用time(),因此捕获了TZ的初始值。解决方法是通过项目属性对话框在环境变量中设置TZ = UTC。
答案 1 :(得分:0)
现在我更好地理解了您的问题(您希望调试器在UTC上运行,如GAE的默认值),这会让人感到兴奋和棘手。 logging.Formatter.formatTime默认根据time.localtime()格式化日期。要更改此设置,请将converter
属性设置为time.gmtime()。这几乎没有记录,但我找到了一篇关于Logging with UTC Timestamps from Python的博客,可能就是你想要的。
告诉我这是否有用;可能是我仍然误解了你的要求。
旧答案: ctime将始终转换为当地时间。服务器上的本地时间与家用计算机的调试器的本地时间不同。您可以将os os.environ
时区变量设置为您想要的任何值; time.ctime()
无关紧要。
尝试formatting time.gmtime(),您将同时使用格林威治标准时间。
gmt = time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())
logging.info("It is now: %s", gmt)
-- It is now: Mon 17 Oct 2011 19:11:10