我从来没有把时间转换成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对象的datetime文档。你必须实现你想要支持自己的时区。这些是文档底部的示例。
下面是一个简单的例子:
输出
这里有一个不依赖于任何外部库的弹性方法:
这避免了DelboyJay例子中的时间问题。还有埃里克·范·奥斯滕修正案中较少的时间问题。
作为一个有趣的脚注,上面计算的时区偏移量可能不同于以下看似等效的表达式,这可能是由于夏令时规则的更改:
更新:此代码段存在使用当前时间的UTC偏移量的弱点,该偏移量可能不同于输入日期时间的UTC偏移量。有关另一个解决方案,请参见对此答案的评论。
为了避开不同的时间,从过去的时间中获取纪元时间。我做的是:
如果不想提供自己的
tzinfo
对象,请查看python-dateutil库。它在zoneinfo (Olson) database之上提供了tzinfo
实现,这样您就可以用某种规范的名称引用时区规则。编辑展开示例以显示
strptime
用法编辑2修复了API用法,以显示更好的入口点方法
编辑3包括时区自动检测方法(Yarin)
相关问题 更多 >
编程相关推荐