如何将datetime.datetime格式的字符串转换为datetime对象?
解决方案
方法1:使用ast.literal_eval(安全的字面量解析)
该方法无需手动解析字符串,且相比原生
eval不会执行恶意代码,更适合处理不可信的日志输入。
import ast from datetime import datetime # 示例时间戳字符串 log_time_str = "datetime.datetime(2021, 9, 10, 10, 15, 0, 250362)" # 解析字符串为datetime对象 dt_obj = ast.literal_eval(log_time_str) # 验证结果,可正常调用strftime print(dt_obj.strftime("%Y-%m-%d %H:%M:%S.%f"))
注意:使用前要确保当前环境已经导入datetime模块,否则解析时会抛出NameError。
方法2:正则匹配提取参数构造(兼容性更强)
如果你不想依赖
datetime模块的导入状态,或者需要对异常格式做兼容,可以手动提取时间参数再构造对象。
import re from datetime import datetime log_time_str = "datetime.datetime(2021, 9, 10, 10, 15, 0, 250362)" # 提取括号内的所有数字 nums = list(map(int, re.findall(r'\d+', log_time_str))) # 按datetime参数顺序构造对象,*nums会自动拆分年、月、日、时、分、秒、微秒参数 dt_obj = datetime(*nums) print(dt_obj.strftime("%Y-%m-%d %H:%M:%S.%f"))
该方法容错性更高,即使日志中datetime的前缀有拼写差异,只要括号内的数字顺序正确就能正常解析。
内容的提问来源于stack exchange,提问作者hellojoshhhy
相关产品推荐
相关产品推荐

