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

查看:46
本文介绍了将日期时间转换为 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.

When I do (dt - datetime(1970,1,1)).total_seconds() I got the timestamp 1378033200.

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

When converting it back using datetime.fromtimestamp I got datetime.datetime(2013, 9, 1, 6, 0).

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

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

推荐答案

你在这里错过的是时区.

What you missed here is timezones.

大概你有五个小时的 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 文档的顶部,其中解释时区以及幼稚"和感知"对象.

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

如果您原来的原始日期时间是 UTC,则恢复它的方法是使用 utcfromtimestamp 而不是 fromtimestamp.

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

另一方面,如果您最初的原始日期时间是本地的,您首先不应该从中减去 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.

或者,如果您有一个感知日期时间对象,则需要在双方使用本地(感知)纪元,或者显式转换为 UTC 或从 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 或更高版本,则只需使用 timestamp 方法,而不是试图自己弄清楚如何去做.即使您不这样做,您也可能需要考虑借用其源代码.

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.)

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

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