如何将文件名中的特殊日期时间格式转为datetime对象用于对比?
文件名日期时间转换与时间区间判断方案
步骤1:提取文件名中的日期时间片段
先从文件名里剥离出纯日期时间字符串,比如处理2024-01-30_17h00min05s237ms.jpg时,只需要去掉后缀.jpg,得到2024-01-30_17h00min05s237ms。
步骤2:将字符串解析为datetime对象
用Python的datetime.strptime方法,配合对应格式字符串就能完成解析:
%Y-%m-%d匹配年-月-日部分_%Hh匹配小时后的h标记%Mmin匹配分钟后的min标记%Ss匹配秒后的s标记%fms匹配毫秒后的ms标记(%f会自动把毫秒转为微秒,不影响后续计算)
代码示例:
from datetime import datetime, timedelta filename = "2024-01-30_17h00min05s237ms.jpg" # 提取日期时间部分 dt_str = filename.split('.')[0] # 解析为datetime对象 file_datetime = datetime.strptime(dt_str, "%Y-%m-%d_%Hh%Mmin%Ss%fms")
步骤3:解析目标日期时间
对于类似1/15/24 3:50 PM的格式,用%m/%d/%y %I:%M %p作为格式字符串解析:
target_time_str = "1/15/24 3:50 PM" target_datetime = datetime.strptime(target_time_str, "%m/%d/%y %I:%M %p")
步骤4:判断是否在20分钟区间内
计算文件名时间加20分钟的结束时间,直接对比目标时间是否落在[文件名时间, 文件名时间+20分钟]区间内:
end_time = file_datetime + timedelta(minutes=20) is_in_range = file_datetime <= target_datetime <= end_time
完整可运行代码
from datetime import datetime, timedelta def is_time_in_20min_window(filename, target_time_str): # 解析文件名中的时间 dt_str = filename.split('.')[0] file_dt = datetime.strptime(dt_str, "%Y-%m-%d_%Hh%Mmin%Ss%fms") # 解析目标时间 target_dt = datetime.strptime(target_time_str, "%m/%d/%y %I:%M %p") # 计算区间结束时间 end_dt = file_dt + timedelta(minutes=20) # 返回判断结果 return file_dt <= target_dt <= end_dt # 测试示例 test_filename = "2024-01-30_17h00min05s237ms.jpg" test_target_in_range = "1/30/24 5:10 PM" # 在17:00-17:20区间内 test_target_out_range = "1/30/24 5:25 PM" # 超出区间 print(is_time_in_20min_window(test_filename, test_target_in_range)) # 输出True print(is_time_in_20min_window(test_filename, test_target_out_range)) # 输出False
内容的提问来源于stack exchange,提问作者Source Matters
相关产品推荐
相关产品推荐

