繁体   English   中英

Python 将时间戳转换为 unix

[英]Python convert timestamp to unix

我知道以前有人问过这些问题,但我正在努力将时间戳字符串转换为 unix 时间并弄清楚 datetime 对象是天真还是有意识

例如,要将时间“2021-05-19 12:51:47”转换为 unix:

>>> from datetime import datetime as dt
>>> dt_obj = dt.strptime("2021-05-19 12:51:47", "%Y-%m-%d %H:%M:%S")
>>> dt_obj
datetime.datetime(2021, 5, 19, 12, 51, 47)

dt_obj是幼稚的还是有意识的,您将如何确定这一点? dt_obj 上的方法,例如timetztzinfotzname似乎没有任何指示——这是否意味着 dt_obj 是幼稚的?

然后得到unix:

>>> dt_obj.timestamp()
1621421507.0

但是,当我在https://www.unixtimestamp.com上检查1621421507.0时,它告诉我上面的 gmt 是 2021 年 5 月 19 日星期三 10:51:47 GMT+0 之后?

由于 Python 的 datetime 默认将 naive datetime 视为本地时间,因此您需要设置时区( tzinfo属性):

from datetime import datetime, timezone

# assuming "2021-05-19 12:51:47" represents UTC:
dt_obj = datetime.fromisoformat("2021-05-19 12:51:47").replace(tzinfo=timezone.utc)

或者,正如@Wolf 所建议的那样,您也可以通过添加解析为UTC 的"+00:00"来修改输入字符串,而不是显式设置tzinfo 属性;

dt_obj = datetime.fromisoformat("2021-05-19 12:51:47" + "+00:00")

无论如何,结果

dt_obj.timestamp()
# 1621428707.0

现在在https://www.unixtimestamp.com/上按预期转换: 在此处输入图像描述

只要您在调用strptime时不指定时区,就会产生天真datetime对象。 您可以通过%z格式说明符传递时区信息,并将+00:00添加到文本日期时间表示中,以获得时区感知datetime时间 object:

from datetime import datetime

dt_str = "2021-05-19 12:51:47"
print(dt_str)
dt_obj = datetime.strptime(dt_str+"+00:00", "%Y-%m-%d %H:%M:%S%z")
print(dt_obj)
print(dt_obj.timestamp())

上面的脚本是这样的:

2021-05-19 12:51:47
2021-05-19 12:51:47+00:00
1621428707.0

datetime.timestamp()

假定原始日期时间实例表示本地时间,并且此方法依赖于平台 C mktime() function 来执行转换。

因此,使用它确实会自动应用您的机器当前时区,给出以下配方以从天真的日期时间计算时间戳,而不受时区的影响:

timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM