以人类可读格式转换纪元时间
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
在你的情况下,1563924640001
到 156392464000
epoch1 = datetime.datetime.fromtimestamp(156392464000).strftime('%c')
print(epoch1)
# output: Sun Nov 18 04:36:40 6925
【讨论】:
以上是关于以人类可读格式转换纪元时间的主要内容,如果未能解决你的问题,请参考以下文章
Bash:以人类可读格式将 unix 时间四舍五入到最接近的分钟