从 Timestamp 获取 datetime 对象(Python)

Posted

技术标签:

【中文标题】从 Timestamp 获取 datetime 对象(Python)【英文标题】:From Timestamp obtain datetime object (Python) 【发布时间】:2022-01-24 03:40:33 【问题描述】:

我正在尝试将此时间戳时间转换为日期。我已经尝试了几个功能(pandas.Timestamp()),但都没有成功。

由于最后的零(3 个零),函数 datetime.fromtimestamp() 似乎无法识别。如果我手动删除这些零,我可以正确转换时间戳。

下面是代码:

from datetime import datetime


ts_0 = 1640225340000
out_0 = datetime.fromtimestamp(ts_0)  #Invalid Input

#Manually change timestamp -> last three zeros deleted
ts_1 = 1640225340
out_1 = datetime.fromtimestamp(ts_0) 
#>>> datetime.datetime(2021, 12, 23, 3, 9)

如果我转到EpochConverter 并复制并粘贴ts_0 我会立即得到正确答案...

我该如何解决这个简单的任务?

【问题讨论】:

您的问题具体是什么? “无法识别” - 代码不会变魔术。该方法被编程为接受秒作为浮点数,仅此而已。 pandas to_datetime 有一个 unit 关键字,可以为您提供更多选择。 【参考方案1】:

也许我遗漏了一些东西,但您不能将原始时间戳(带有 3 个额外的零)除以 1000 吗?

from datetime import datetime

ts_0 = 1640225340000
out_0 = datetime.fromtimestamp(ts_0/1000)

【讨论】:

是的,我知道了。但这只是为了避免捷径解决方案,我想知道为什么为执行此任务而构建的原始功能无法完成这样的简单任务...如果您转到epochconverter.com并复制并粘贴ts_0 不用跳1000就能得到正确答案 因为额外的 3 个零是错误的。 unix 时间戳是自 1/1970 午夜以来的秒数。不是毫秒(这是添加 3 个零给你的)。 epochconverter.com 可以很好地尝试根据输入数字的比例来计算它,但请注意,当你输入它时,它甚至会说“假设毫秒”。程序函数通常不会为您承担任何事情! 将 Unix 时间表示为自纪元以来的毫秒数非常好,这没有错。选择的分辨率(单位)和数据类型仅决定了您可以表示的范围与精度。 如果您愿意,您当然可以将 Unix 时间表示为毫秒,但这不是 fromtimestep() 所期望的。该文档特别指出:“从 POSIX 时间戳构造一个日期时间(如 time.time())”,并且 time.time() 返回秒 not 毫秒。 epochconverter 网站添加了一些代码来尝试从输入的比例推断单位,fromtimestep() not 会这样做。

以上是关于从 Timestamp 获取 datetime 对象(Python)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Timestamp 转换为 Date 或 DateTime 对象?

将 DATETIME 从 SQLite 解析为 java.SQL.Timestamp 时出错

“Timestamp”类型不是“DateTime”类型的子类型

java如何获取数据库中datetime类型数据

将 javascript 中的 timestamp(时间戳) 转 c# 的 datetime类型

mysql中,datetime与timestamp数据类型有啥区别