将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”等?)我确信,我的第一个问题的答案可能包含一个参数,第二个参数。


慕容3067478
浏览 855回答 3
3回答

弑天下

如果你不想提供你自己的tzinfo对象,请查看Python-dateutil图书馆。它提供tzinfo在Zoneinfo(Olson)数据库这样您就可以某种规范的名称引用时区规则。from datetime import datetimefrom 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 defaultutc = utc.replace(tzinfo=from_zone)# Convert time zonecentral = utc.astimezone(to_zone)编辑扩展示例显示strptime使用编辑2修正API使用以显示更好的入口点方法编辑3包括时区自动检测方法(亚林)

30秒到达战场

下面是一个不依赖于任何外部库的弹性方法:from datetime import datetimeimport timedef datetime_from_utc_to_local(utc_datetime):     now_timestamp = time.time()     offset = datetime.fromtimestamp(now_timestamp) - datetime.utcfromtimestamp(now_timestamp)     return utc_datetime + offset这避免了DelboJay示例中的时间问题。以及埃里克·范乌斯滕修正案中较少的时机问题。作为一个有趣的脚注,上面计算的时区偏移量可能与以下看似等效的表达式不同,这可能是由于夏令规则的更改:offset = datetime.fromtimestamp(0) - datetime.utcfromtimestamp(0) # NO!最新情况:此片段具有使用当前时间的UTC偏移量的弱点,这可能与输入日期时间的UTC偏移量不同。关于另一个解决方案,请参见对此答案的评论。为了周旋不同的时代,抓住时代的时间,从过去的时间。我要做的是:def utc2local (utc):     epoch = time.mktime(utc.timetuple())     offset = datetime.fromtimestamp (epoch) - datetime.utcfromtimestamp (epoch)     return utc + offset
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python