java设计模式之责任链
工作中遇到这样一个问题,需要读取Excel里面的数据,存入数据库。
由于Excel是个人填的,所以日期格式有多种多样,如何才能尽可能的识别用户填写的五花八门的日期,最终格式化成自己想要的形式?
这种需求,我想到了责任链模式
总有一种能够命中,如果实在不行,那就只能认为格式错误了。
@Component public class DateFormatChain { private static final List<DateTimeFormatter> formatList= Lists.newArrayList(); @PostConstruct public static void init() { formatList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); formatList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); formatList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH")); formatList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd")); formatList.add(DateTimeFormatter.ofPattern("yyyy年MM月dd日")); formatList.add(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")); formatList.add(DateTimeFormatter.ofPattern("yyyy/MM/dd")); formatList.add(DateTimeFormatter.ofPattern("yyyy/MM")); formatList.add(DateTimeFormatter.ofPattern("yyyyMMdd")); formatList.add(DateTimeFormatter.ofPattern("yyyy-MM")); formatList.add(DateTimeFormatter.ofPattern("yyyyMM")); formatList.add(DateTimeFormatter.ofPattern("yyyy")); formatList.add(new DateTimeFormatterBuilder() .appendPattern("yyyy-MM") .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) .toFormatter()); formatList.add(new DateTimeFormatterBuilder() .appendPattern("yyyyMM") .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) .toFormatter()); formatList.add(new DateTimeFormatterBuilder() .appendPattern("yyyy/MM") .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) .toFormatter()); formatList.add(new DateTimeFormatterBuilder() .appendPattern("yyyy") .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1) .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) .toFormatter()); } /** * 责任链模式:将字符串解析后转换成目标格式 * @param s * @param targetFormat * @return */ private static String parseChain(String s,DateTimeFormatter targetFormat) { for (DateTimeFormatter format : formatList) { try { TemporalAccessor parse = format.parse(s); return targetFormat.format(parse); } catch (Exception e) { System.out.println(format); } } return null; } public static void main(String[] args) { final DateTimeFormatter dtf2=DateTimeFormatter.ofPattern("yyyy-MM"); init(); String s="2020-01-01 11:12"; String s1 = parseChain(s, dtf2); System.out.println(s1); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗