Python Eve中DATE_FORMAT如何同时兼容带与不带微秒的时间戳
结论
Python Eve 原生的 DATE_FORMAT 配置项不支持同时设置多种时间格式。
该配置底层直接传递给Python标准库的 datetime.strptime() 方法做日期解析,该方法仅支持单一固定格式匹配,不支持正则式的可选分组语法,因此你尝试的(.%f)、[.%f]类写法无法被识别。
可行解决方案(无需自定义数据类型)
无需修改Eve源码或自定义数据类型,只需要在Eve实例初始化前,对Eve的全局日期解析方法做补丁替换即可,示例代码如下:
from datetime import datetime from eve.utils import parsedate as original_parsedate import eve.utils def patched_parsedate(date_str): # 优先匹配带微秒的时间格式 try: return datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S.%fZ') except ValueError: # 匹配失败后降级匹配不带微秒的格式 return datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%SZ') # 替换原生日期解析方法 eve.utils.parsedate = patched_parsedate # 之后再正常初始化Eve实例 from eve import Eve app = Eve() # 其余业务逻辑...
提示:
DATE_FORMAT配置同时控制日期输出的序列化格式,你可以根据业务需要设置为两种格式中的任意一种,上述补丁仅影响输入解析逻辑,不会干扰输出序列化。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

