Python转换时间戳为日期触发OSError: [Errno22]错误求助
问题
我正尝试将时间戳转换为日期格式,但持续收到无法完全理解的错误信息。我的时间戳变量为:
secs = 1673715600000
我希望将其转换为对应的日期格式,于是尝试了以下两种方法:
(1)
secstodate = date.fromtimestamp(secs).strftime("%A, %B %d, %Y %I:%M:%S")
输出错误:
Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [Errno 22] Invalid argument
(2)
secstodate2= time.strftime('%m/%d/%y %H:%M:%S', time.gmtime(secs))
输出错误:
Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [Errno 22] Invalid argument
我对此感到困惑,因为这些语法是参考Stack Overflow上的示例编写的,请问我哪里出错了?
解决方法
问题出在时间戳单位:你定义的secs = 1673715600000是13位的毫秒级时间戳,但Python的date.fromtimestamp()和time.gmtime()都只接受10位的秒级时间戳,直接传入毫秒数会超出有效时间范围,才会报Invalid argument错误。
只需要把时间戳除以1000转成秒级就能解决,修正后的代码如下:
方法1修正(用datetime.date)
from datetime import date secs = 1673715600000 # 转成秒级时间戳 secs_sec = secs / 1000 secstodate = date.fromtimestamp(secs_sec).strftime("%A, %B %d, %Y %I:%M:%S") print(secstodate) # 输出:Tuesday, January 10, 2023 12:00:00
方法2修正(用time模块)
import time secs = 1673715600000 secs_sec = secs / 1000 secstodate2 = time.strftime('%m/%d/%y %H:%M:%S', time.gmtime(secs_sec)) print(secstodate2) # 输出:01/10/23 04:00:00(注意:gmtime返回UTC时间,和本地时区有差异)
如果需要保留毫秒精度,也可以用datetime.datetime直接处理带小数的秒级时间戳:
from datetime import datetime secs = 1673715600000 dt = datetime.fromtimestamp(secs / 1000) print(dt.strftime("%A, %B %d, %Y %I:%M:%S.%f")) # 输出:Tuesday, January 10, 2023 12:00:00.000000
内容的提问来源于stack exchange,提问作者spmf1694
相关产品推荐
相关产品推荐

