Python如何将13位毫秒时间戳转换为可读时间格式?
Python处理13位毫秒级Unix时间戳报错的解决方法
报错原因
你拿到的时间戳1635251181000是毫秒级的Unix时间戳,而Python标准库datetime的fromtimestamp()方法默认接收的是秒级的Unix时间戳,直接传入13位的毫秒级时间戳会因为数值超出合法范围触发OSError: [Errno 22] Invalid argument错误。
正确处理方案
处理逻辑为:把毫秒级时间戳除以1000转换为秒级之后再传入方法即可,也可以根据需求保留毫秒精度。
基础转换(秒级易读时间)
from datetime import datetime raw_timestamp = 1635251181000 # 转换为秒级时间戳 second_timestamp = raw_timestamp / 1000 # 转换为本地时区的易读格式 local_time = datetime.fromtimestamp(second_timestamp) print(local_time.strftime("%Y-%m-%d %H:%M:%S")) # 输出示例:2021-10-26 20:26:21
保留毫秒精度的转换
如果需要保留原始的毫秒信息,可以用如下方式处理:
from datetime import datetime raw_timestamp = 1635251181000 second_timestamp = raw_timestamp / 1000 local_time = datetime.fromtimestamp(second_timestamp) # 格式化时保留毫秒 print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]) # 输出示例:2021-10-26 20:26:21.000
转换为UTC时间(可选)
如果需要转换为UTC标准时间而非本地时区,替换为utcfromtimestamp方法即可:
utc_time = datetime.utcfromtimestamp(raw_timestamp / 1000) print(utc_time.strftime("%Y-%m-%d %H:%M:%S"))
补充:从原始字符串提取时间戳
如果你的输入是类似"TimeStamp: 1635251181000"的字符串,可以先拆分提取时间戳数值再处理:
raw_str = "TimeStamp: 1635251181000" raw_timestamp = int(raw_str.split(": ")[1]) # 后续转换逻辑和上述方案一致
内容的提问来源于stack exchange,提问作者zertalion
相关产品推荐
相关产品推荐

