我正在尝试解析文档中的某些日期。看来用户已经以类似但并非确切的格式输入了这些日期。
格式如下:
9/09 9/2009 09/2009 9/1/2009 9-1-2009
尝试解析所有这些的最佳方法是什么?这些似乎是最常见的,但是我想让我感到困扰的是,如果我的模式“ M / yyyy”永远不会在“ MM / yyyy”之前出现,我是否必须设置try / catch块以最小限制嵌套到最大限制方式?看来肯定会花费很多代码重复才能实现此目的。
你需要SimpleDateFormat为每个不同的模式使用不同的对象。也就是说,由于以下原因,你不需要那么多不同的对象:
SimpleDateFormat
数字:对于格式设置,图案字母的数量是最小位数,较短的数字用零填充此数量。对于解析,除非需要将两个相邻字段分开,否则将忽略模式字母的数量。
因此,你将需要以下格式:
"M/y"
9/09
9/2019
09/2019
"M/d/y"
9/1/2019
"M-d-y"
9-1-2019
因此,我的建议是编写一种工作方式如下(未测试)的方法:
// ... List<String> formatStrings = Arrays.asList("M/y", "M/d/y", "M-d-y"); // ... Date tryParse(String dateString) { for (String formatString : formatStrings) { try { return new SimpleDateFormat(formatString).parse(dateString); } catch (ParseException e) {} } return null; }