You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:05:18