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

Python中Firebase时间戳转%Y%m%d%H%M%S%f格式报错求助

解决Firebase毫秒级时间戳转"%Y%m%d%H%M%S%f"格式的问题

这个问题我之前也碰到过!核心原因是你混淆了毫秒级和秒级时间戳的区别:Firebase返回的1521508504583是毫秒数,但Python的datetime构造器默认只认秒级时间戳,直接把毫秒数传进去肯定会超出整数范围,所以才会报signed integer is greater than maximum错误。

正确的处理步骤

我们需要把毫秒时间戳拆成秒部分和微秒部分(因为1毫秒=1000微秒),再传给datetime对象,这样就能正确格式化出包含微秒的时间字符串了。

修正后的代码

from datetime import datetime

def formatdatetime(sfd):
    # 拆分毫秒时间戳为秒和微秒
    seconds = sfd // 1000  # 取整数秒
    microseconds = (sfd % 1000) * 1000  # 把剩余的毫秒转成微秒
    
    # 创建datetime对象(如果需要UTC时间,改用utcfromtimestamp)
    ts = datetime.fromtimestamp(seconds)
    # 补上微秒部分
    ts = ts.replace(microsecond=microseconds)
    
    # 格式化输出
    print(ts.strftime("%Y%m%d%H%M%S%f"))

formatdatetime(1521508504583)

代码说明

  • sfd // 1000:将毫秒数向下取整得到秒级时间戳,这是fromtimestamp需要的参数
  • (sfd % 1000)*1000:取毫秒数的余数部分,乘以1000转换成微秒(因为datetime的microsecond属性接受0-999999的数值)
  • replace(microsecond=...):给datetime对象补充微秒信息,这样%f就能正确输出6位的微秒值(比如583毫秒对应583000微秒)

简化写法(注意精度问题)

如果你的场景对时间精度要求不高,也可以直接把毫秒数转成浮点数的秒数传入fromtimestamp:

from datetime import datetime

def formatdatetime(sfd):
    ts = datetime.fromtimestamp(sfd / 1000)
    print(ts.strftime("%Y%m%d%H%M%S%f"))

formatdatetime(1521508504583)

不过这种方式可能会因为浮点数精度问题,导致极少数情况下微秒计算不准确,所以第一种拆分的方法更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:53:30