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

字符串时间转datetime存入Firebase报格式不匹配错误如何解决

报错原因

你调用datetime.strptime时传入的格式字符串,和实际时间字符串的结构完全不匹配:

  • 待转换的时间字符串'2022-06-29 07:55:28'用-分隔年、月、日,后半段是24小时制的时、分、秒,没有AM/PM标识
  • 你写的格式串'%Y %m %d %I:%M:%S%p'用空格分隔年、月、日,按12小时制解析小时,还要求末尾带AM/PM后缀,和输入结构完全对应不上,所以抛出值错误。
解决方案

不需要使用momentjs或其他第三方时间处理工具,Python标准库自带的datetime模块加上Firebase SDK的内置方法就可以完成转换,Firebase/Firestore支持直接存入原生datetime对象,会自动转换为库内标准的Timestamp格式。

  1. 修正格式串完成解析
    匹配输入字符串的正确格式串为'%Y-%m-%d %H:%M:%S',注意几个和你之前写错的点:
    • 年、月、日之间的分隔符要写-,和输入保持一致,不能用空格
    • 24小时制的小时要用格式符%H,不能用12小时制的%I
    • 输入没有AM/PM标识,不需要加%p
      示例代码:
    from datetime import datetime
    from firebase_admin import firestore
    
    time_str = '2022-06-29 07:55:28'
    # 解析为原生datetime对象
    dt = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
    # 直接存入Firestore即可,SDK自动转成Timestamp
    db.collection('your_collection').document('doc_id').set({
        "time_field": dt,
        # 如果不需要固定为字符串对应的时间,优先用服务端时间戳,避免客户端时钟偏差
        "server_time": firestore.SERVER_TIMESTAMP
    })
    
  2. 更简便的解析方式(Python 3.7+可用)
    你的时间字符串符合ISO 8601格式,可以直接用datetime.fromisoformat方法解析,不需要手写格式串,减少格式写错的概率:
    dt = datetime.fromisoformat(time_str)
    
补充说明

如果业务场景不需要强制存入字符串对应的固定时间,优先使用firestore.SERVER_TIMESTAMP取值,这个值由Firebase服务端生成,不会受客户端本地时间不准、时区配置错误的影响,可靠性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:48:21