为了账号安全,请及时绑定邮箱和手机立即绑定

将UTC日期时间字符串转换为本地日期时间

将UTC日期时间字符串转换为本地日期时间

慕容3067478 2019-07-02 15:45:44
将UTC日期时间字符串转换为本地日期时间我从来没有把时间转换到世界协调时。最近有一个请求,要求我的应用程序是时区感知,我一直在运行自己的圈子。关于将本地时间转换为UTC的大量信息,我发现这是相当基本的(也许我也做错了),但是我找不到任何关于将UTC时间轻松转换为最终用户时区的信息。简而言之,Android应用程序发送给我(appEngine应用程序)数据,其中包含一个时间戳。要将该时间戳存储到UTC时间,我将使用:datetime.utcfromtimestamp(timestamp)看来很管用。当我的应用程序存储数据时,它会提前5个小时存储(我是EST-5)。数据存储在appEngine的BigTable上,当检索到数据时,它会以字符串的形式出现,如下所示:"2011-01-21 02:37:21"如何将此字符串转换为用户正确时区中的日期时间?此外,建议的用户时区信息存储是什么?(您通常如何存储tz信息,例如:“-5:00”或“EST”等?)我确信,我的第一个问题的答案可能包含一个参数,第二个参数。
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

如果你不想提供你自己的tzinfo对象,请查看Python-dateutil图书馆。它提供tzinfoZoneinfo(Olson)数据库这样您就可以某种规范的名称引用时区规则。

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包括时区自动检测方法(亚林)


查看完整回答
反对 回复 2019-07-02
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

下面是一个不依赖于任何外部库的弹性方法:

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


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 854 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信