如何使用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
相关产品推荐
相关产品推荐

