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

使用time.gmtime转换Unix时间戳报错OSError:无效参数

Unix纪元时间(微秒级)转换为可读时间的Python解决方案

问题根源

你传入的1693063813031885是微秒级Unix时间戳,但Python的time.gmtime()仅支持秒级整数时间戳,直接传入超大数值会超出有效范围,触发OSError: [Errno 22] Invalid argument。

解决方案

推荐使用datetime模块处理高精度时间和时区转换,以下两种方法均可得到你想要的输出:

方法一:拆分秒与微秒,手动转换时区

from datetime import datetime, timedelta

# 微秒级时间戳
micro_ts = 1693063813031885
# 拆分出秒数和微秒数
seconds = micro_ts // 1000000
microseconds = micro_ts % 1000000

# 先转为UTC时间,再减去5小时得到UTC-05:00时间
utc_dt = datetime.utcfromtimestamp(seconds).replace(microsecond=microseconds)
target_dt = utc_dt - timedelta(hours=5)

# 格式化输出,匹配预期格式
formatted = target_dt.strftime("%Y-%m-%d-%H:%M:%S.%f")
final_output = f"{formatted[:-3]}_{formatted[-3:]} (UTC-05:00)"
print(final_output)

方法二:直接指定时区转换

from datetime import datetime, timezone, timedelta

micro_ts = 1693063813031885
# 转换为UTC-05:00时区的datetime对象
target_dt = datetime.fromtimestamp(micro_ts / 1000000, timezone(timedelta(hours=-5)))

# 格式化输出
formatted = target_dt.strftime("%Y-%m-%d-%H:%M:%S.%f")
final_output = f"{formatted[:-3]}_{formatted[-3:]} (UTC-05:00)"
print(final_output)

说明

  • 两种方法都先将微秒级时间戳转换为秒级浮点值,保留了微秒精度;
  • 时区处理上,两种方式最终结果一致,可根据习惯选择;
  • %f会输出6位微秒,通过字符串截取拆分出前三位和后三位,用下划线连接,匹配你需要的031_885格式。

内容的提问来源于stack exchange,提问作者OO7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:11:08