我从来没有不得不将时间与UTC转换。最近有人要求我的应用注意时区,并且我一直在圈子里奔波。我发现很多有关将本地时间转换为UTC的信息,这很基本(也许我也做错了),但是我找不到任何有关将UTC时间轻松转换为最终用户时区的信息。
简而言之,android应用程序向我发送了(appengine应用程序)数据,该数据中包含时间戳。要将时间戳存储为UTC时间,我正在使用:
datetime.utcfromtimestamp(timestamp)
那似乎行得通。当我的应用存储数据时,存储时间要提前5个小时(我是EST -5)
数据存储在Appengine的BigTable上,并且在检索时会以字符串形式显示,如下所示:
"2020-01-21 02:37:21"
如何在用户正确的时区将此字符串转换为DateTime?
另外,建议为用户存储的时区信息是什么?(你通常如何存储tz信息,即:“-5:00”或“ EST”等?)我确定第一个问题的答案可能包含一个参数,第二个问题的答案。
如果你不想提供自己的tzinfo对象,请签出python-dateutil库。它tzinfo在zoneinfo(Olson)数据库的顶部提供了实现,因此你可以使用一些规范的名称来引用时区规则。
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('2020-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用法