以人类可读格式转换纪元时间

Posted

技术标签:

【中文标题】以人类可读格式转换纪元时间【英文标题】:converting epoch time in human readable format 【发布时间】:2019-12-03 15:33:43 【问题描述】:

我想将纪元时间转换为人类可读的格式,当我给出随机纪元时间时,例如下面的一个

 epoch1 = datetime.datetime.fromtimestamp(1347517370).strftime('%c')
 print(epoch1)

那么这工作正常。 但是,如果我使用的是我通过 API 检索的纪元时间。这不起作用并给我错误

epoch1 = datetime.datetime.fromtimestamp(1563924640001).strftime('%c')
print(epoch1)

这有什么问题?即使我传递变量它也不起作用。

epoch1 = datetime.datetime.fromtimestamp(epoch).strftime('%c')

我想从 API 获取所有纪元时间并将其转换为人类可读的格式。

非常感谢任何帮助

错误:

Traceback (most recent call last):
  File "C:/Users/kiran.tanweer/Documents/Python Scripts/siem/01_GetOffenses.py", line 1042, in <module>
    main()
  File "C:/Users/kiran.tanweer/Documents/Python Scripts/siem/01_GetOffenses.py", line 953, in main
    epoch1 = datetime.datetime.fromtimestamp(1563924640001).strftime('%c')
OSError: [Errno 22] Invalid argument

【问题讨论】:

您的代码 epoch1 = datetime.datetime.fromtimestamp(1563924640001).strftime('%c') 让我访问 ValueError: year 51528 is out of range。可能是您的时间戳ms 而不是s?不管怎样,我不明白你为什么会收到OSError 尝试将1563924640001 更改为156392464000。如果正确,则应排除最后一位 @AnjaneyuluBatta 除非他正在处理相对较远的预测(例如 6925 年?),否则我倾向于相信您的方法可能不是 OP 想要的。 【参考方案1】:

您将从该 API 获得毫秒的纪元时间。

除以 1000 得到 fromtimestamp 接受的秒数:

>>> datetime.datetime.fromtimestamp(1563924640001 / 1000).strftime('%c')
'Wed Jul 24 02:30:40 2019'

【讨论】:

这是一个有效的假设,但为什么1563924640001 会抛出OSError 而不仅仅是给出一个遥远的未来的日期?在我的系统中,抛出 ValueError 直到年份 9999 @norok2 1563924640001 在 51,528 年。 我明白了,但为什么OSError OP 在 Windows 上;底层日期 API 的工作方式略有不同。【参考方案2】:

像下面这样试试

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
'2012-09-13 14:22:50' # Local time

在你的情况下,1563924640001156392464000

epoch1 = datetime.datetime.fromtimestamp(156392464000).strftime('%c')
print(epoch1)
# output: Sun Nov 18 04:36:40 6925

【讨论】:

以上是关于以人类可读格式转换纪元时间的主要内容,如果未能解决你的问题,请参考以下文章

将人类可读的日期转换为纪元时间戳

Bash:以人类可读格式将 unix 时间四舍五入到最接近的分钟

将 JSON 纪元时间转换为本地人类可读日期

使用 Moment.js 将人类可读时间转换为 Unix 纪元时间

将带有单位的数字转换为非人类可读格式

如何在 python 中将普通时间戳转换为纪元时间戳