将datetime转换为Unix时间戳,并将其转换回python [英] Convert datetime to Unix timestamp and convert it back in python

查看:125
本文介绍了将datetime转换为Unix时间戳,并将其转换回python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 dt = datetime(2013,9,1,11),我想获取这个datetime对象的Unix时间戳。

I have dt = datetime(2013,9,1,11), and I would like to get a Unix timestamp of this datetime object.

当我做 dt - datetime(1970,1,1))。total_seconds()我得到时间戳 1378033200

使用 datetime.fromtimestamp转换回来我得到 datetime.datetime(2013,9,1,6,0)

小时不匹配。我在这里错过了什么?

The hour doesn't match. What did I miss here?

推荐答案

你错过的是时区。

大概你的UTC有五个小时,所以2013-09-01T11:00:00本地和2013-09-01T06:00:00Z是同一时间。

Presumably you've five hours off UTC, so 2013-09-01T11:00:00 local and 2013-09-01T06:00:00Z are the same time.

您需要阅读 datetime docs,它解释了时区和天真和意识对象。

You need to read the top of the datetime docs, which explain about timezones and "naive" and "aware" objects.

如果你原来的天真的datetime是UTC,那么恢复它的方法是使用 utcfromtimestamp ,而不是 fromtimestamp

If your original naive datetime was UTC, the way to recover it is to use utcfromtimestamp instead of fromtimestamp.

另一方面,如果你原来的天真的datetime是本地的,你不应该减去一个UTC时间戳从它开始;使用 datetime.fromtimestamp(0)

On the other hand, if your original naive datetime was local, you shouldn't have subtracted a UTC timestamp from it in the first place; use datetime.fromtimestamp(0) instead.

或者,如果您有一个感知的datetime对象,则需要或者使用两边的本地(意识)纪元,或者明确地转换为UTC。

Or, if you had an aware datetime object, you need to either use a local (aware) epoch on both sides, or explicitly convert to and from UTC.

如果您有或可以升级到Python 3.3或更高版本只需使用 时间戳 方法,而不是试图找出自己如何做。即使没有,您也可以考虑借用其源代码

If you have, or can upgrade to, Python 3.3 or later, you can avoid all of these problems by just using the timestamp method instead of trying to figure out how to do it yourself. And even if you don't, you may want to consider borrowing its source code.

(如果你可以等待Python 3.4,它看起来像 PEP 341 有可能使其成为最终版本,这意味着所有JF Sebastian和我在评论中所说的东西应该只是stdlib,并且以同样的方式工作在Unix和Windows上。)

(And if you can wait for Python 3.4, it looks like PEP 341 is likely to make it into the final release, which means all of the stuff J.F. Sebastian and I were talking about in the comments should be doable with just the stdlib, and working the same way on both Unix and Windows.)

这篇关于将datetime转换为Unix时间戳,并将其转换回python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆