使用Python将UTC日期时间字符串转换为本地日期时间
我从来没有把时间转换成UTC。最近有一个请求要让我的应用程序能够识别时区,而且我一直在圈子里跑。关于将本地时间转换为UTC的大量信息,我发现它相当基本(也许我也做错了),但我找不到任何有关将UTC时间轻松转换为最终用户时区的信息。
简而言之,Android应用程序向我发送(appengine app)数据,在该数据中是一个时间戳。要将时间戳存储到我正在使用的时间:
datetime.utcfromtimestamp(timestamp)
这似乎有效。当我的应用程序存储数据时,它将提前5小时存储(我是EST -5)
数据存储在appengine的BigTable上,当检索到它时,它就像一个字符串一样:
"2011-01-21 02:37:21"
如何在用户正确的时区将此字符串转换为DateTime?
此外,用户时区信息的推荐存储是什么? (你如何存储tz信息,即:“-5:00”或“EST”等等?)我确信我的第一个问题的答案可能包含一个参数,第二个答案。
没有找到相关结果
已邀请:
12 个回复
先对冈蒲
对象,请查看python-dateutil库。它在zoneinfo(Olson)数据库之上提供了
实现,这样您就可以通过一个有点规范的名称来引用时区规则。
编辑扩展示例以显示
用法 编辑2固定API用法以显示更好的入口点方法 编辑3包含时区的自动检测方法(Yarin)
慰泥悍瓶
这避免了DelboyJay示例中的时序问题。 Erik van Oosten的修正案中的时间问题较少。 作为一个有趣的脚注,上面计算的时区偏移量可能与以下看似等效的表达式不同,可能是由于夏令时规则更改:
更新:此代码段具有使用当前时间的UTC偏移量的弱点,该偏移量可能与输入日期时间的UTC偏移量不同。有关其他解决方案,请参阅此答案的评论 要绕过不同的时间,从传入的时间开始抓住纪元时间。这就是我的工作:
磐去裸猜饲
产量
坛沤疲撑拆
时区:
邪罗逢确胃
翱抹村
以外的任何其他模块,此答案应该会有所帮助。
返回一个天真的
对象(不是一个知道的对象)。意识到的是时区意识,天真不是。如果要在时区之间进行转换(例如,在UTC和本地时间之间),您需要知道一个。 如果你不是实例化日期开始的那个,但是你仍然可以在UTC时间创建一个天真的
对象,你可能想尝试这个Python 3.x代码来转换它:
注意不要错误地假设如果你的时区当前是MDT,那么夏令时不能用于上面的代码,因为它打印MST。您会注意到,如果您将月份更改为8月,则会打印MDT。 另一个获得意识
对象(也在Python 3.x中)的简单方法是使用指定的时区创建它。这是一个使用UTC的例子:
如果你使用Python 2.x,你可能必须子类
并使用它来帮助你创建一个有意识的
对象,因为2.23ѭ在Python 2.x中不存在。
慰泥悍瓶
邪罗逢确胃
呈辖玫割善
将您的时间转换为自Unix纪元以来的秒数和
转换回来:
给
(因为我在UTC + 03:00时区)。
涸坍饺
你可以用任何东西喂
。时间戳,iso字符串等
爆山
例如,我的时区是'+08:00'。输入utc = 2018-10-17T00:00:00.111Z,然后输出= 2018-10-17T08:00:00 + 08:00
磐去裸猜饲