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

如何使用Python将不同格式时间字符串转换为DatetimeWithNanoseconds格式

不需要手动逐位解析字符串提取整数,有两种成熟的实现方案可以选,其中就包含你提到的类似strptime、指定格式符匹配的用法:

方案1:指定格式匹配(推荐,可控性最高)

你可以先穷举所有业务中会用到的时间格式,复用Python标准库的datetime.strptime完成解析,再转换为DatetimeWithNanoseconds即可,示例代码如下:

from datetime import datetime
from google.cloud.firestore_v1 import DatetimeWithNanoseconds

# 按实际业务需要补充支持的格式
SUPPORTED_FORMATS = [
    "%Y%m%d",
    "%Y%m%d%H%M%S"
]

def str_to_dwns(time_str: str) -> DatetimeWithNanoseconds:
    for fmt in SUPPORTED_FORMATS:
        try:
            parsed_dt = datetime.strptime(time_str, fmt)
            return DatetimeWithNanoseconds(
                parsed_dt.year,
                parsed_dt.month,
                parsed_dt.day,
                parsed_dt.hour,
                parsed_dt.minute,
                parsed_dt.second,
                # datetime仅支持到微秒,转纳秒直接乘1000即可,无毫秒/微秒部分时自动为0
                nanosecond=parsed_dt.microsecond * 1000
            )
        except ValueError:
            continue
    raise ValueError(f"不支持的时间字符串格式:{time_str}")

这个方案的优势是不会出现解析歧义,性能和稳定性都更高,适合格式可穷举的场景。

方案2:自动格式解析

如果你的时间格式类型太多无法穷举,可以用python-dateutil库的自动解析能力处理,示例如下:

from dateutil import parser
from google.cloud.firestore_v1 import DatetimeWithNanoseconds

def str_to_dwns_auto(time_str: str) -> DatetimeWithNanoseconds:
    parsed_dt = parser.parse(time_str)
    return DatetimeWithNanoseconds(
        parsed_dt.year,
        parsed_dt.month,
        parsed_dt.day,
        parsed_dt.hour,
        parsed_dt.minute,
        parsed_dt.second,
        nanosecond=parsed_dt.microsecond * 1000
    )

注意这个方案有极低概率出现格式歧义,建议提前用全量业务样本验证解析准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:48:03