Python – 将UTC datetime字符串转换为本地datetime

问题:

我从来没有必要将时间转换成utc。最近有一个请求让我的应用程序得到时区知道,我一直在自己的圈子。许多关于将本地时间转换为utc的信息,我发现相当基本(也许我也在做错误),但是我找不到任何有关容易地将utc时间转换为最终用户时区的信息。
简而言之,android应用程序发送给我(appengine app)数据,在该数据中是一个时间戳。要将该时间戳存储到我正在使用的utc时间:

datetime.utcfromtimestamp(timestamp)

这似乎正在工作。当我的应用程序存储数据时,它正在存储5个小时提前(我是EST -5)
数据被存储在appengine的BigTable上,当它被检索出来时,它就像这样一个字符串:

"2011-01-21 02:37:21"

如何在用户正确的时区将此字符串转换为DateTime?
另外,用户时区信息推荐的存储是什么? (你通常如何存储tz信息,即:“-5:00”或“EST”等?)我确定我的第一个问题的答案可能包含第二个参数的答案。

回答:

如果您不想提供自己的tzinfo对象,请查看python-dateutil库。它在zoneinfo (Olson) database之上提供tzinfo实现,以便您可以通过某种规范的名称来引用时区规则。

from datetime import datetime
from dateutil import tz

# METHOD 1: Hardcode zones:
from_zone = tz.gettz('UTC')
to_zone = tz.gettz('America/New_York')

# METHOD 2: Auto-detect zones:
from_zone = tz.tzutc()
to_zone = tz.tzlocal()

# utc = datetime.utcnow()
utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S')

# Tell the datetime object that it's in UTC time zone since 
# datetime objects are 'naive' by default
utc = utc.replace(tzinfo=from_zone)

# Convert time zone
central = utc.astimezone(to_zone)

 编辑扩展示例以显示strptime使用
 编辑2修正API使用情况,显示更好的入口点方法
 编辑3包含时区的自动检测方法(Yarin)

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python – Convert UTC datetime string to local datetime

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 3 = 1