我从来没有需要在 UTC 和 UTC 之间进行时间转换。最近有人请求让我的应用程序了解时区,但我一直在兜圈子。有关将本地时间转换为 UTC 的大量信息,我发现这些信息相当简单(也许我也做错了),但我找不到任何有关轻松将 UTC 时间转换为最终用户时区的信息。
简而言之,Android 应用程序向我(appengine 应用程序)发送数据,并且该数据中包含时间戳。要将时间戳存储为 utc 时间,我正在使用:
datetime.utcfromtimestamp(timestamp)
这似乎有效。当我的应用程序存储数据时,它会提前 5 小时存储(我是 EST -5)
数据存储在 appengine 的 BigTable 中,检索时它会以字符串形式出现,如下所示:
"2011-01-21 02:37:21"
如何将此字符串转换为用户正确时区的日期时间?
另外,用户时区信息的建议存储是什么? (您通常如何存储 tz 信息,即:“-5:00”或“EST”等?)我确信我的第一个问题的答案可能包含一个参数,第二个问题的答案。
如果您不想提供自己的tzinfo
对象,检查python-dateutil图书馆。它提供tzinfo
之上的实现zoneinfo(奥尔森)数据库这样您就可以通过有点规范的名称来引用时区规则。
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)
Edit扩展示例显示strptime
usage
Edit 2修复了 API 用法以显示更好的入口点方法
Edit 3包含时区自动检测方法 (Yarin)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)