我有一个日期为APR-JUN10APR-JUN 2010,我需要输出为2010-06-30我需要最好的方法来解析上述java中的日期,并且应该灵活地添加更多此类日期格式。注意:APR-JUN10不会被任何Java api解析,我们必须分解APR&JUN 10并将日期作为2010-06-30

最佳答案

您需要确定您的要求。

目前,您告诉我们的是APR-JUN 2010应该转换为6月的最后一天。

但是FEB-JUN 2010呢?那也应该转换为六月的最后一天吗?还是由于未满四分之一而抛出解析异常?那么JUL-JUN 2010,第二个月在第一个月之前呢? MAY-JUL 2010怎么样?三个月,但也许您对“季度”的定义要求从一月,四月,七月,十月开始。

满足自己的要求后,就可以着手进行转换了。

现有的DateFormat实现不太可能为您完成此任务。您可能需要在自己的代码中解析字符串。

如果唯一合法的选项是JAN-MARAPR-JUNJUL-SEPOCT-DEC,那么您只有一个五向切换语句,可以在Calendar对象上设置月份和日期(第五种方式是default:引发异常的情况。

如果您的要求更复杂,那么您的代码将需要更复杂。使用正则表达式将字符串分成多个部分将是一个不错的第一步。

Pattern patt = Pattern.compile("(.{3})-(.{3}) (\d+)");
Matcher matcher = patt.matcher(qaurterString);
if(! matcher.find() || m.groupCount() != 3) {
    throw new ParseException(...)
}
String fromMonth = matcher.group(1);
String toMonth = matcher.group(2);
int year = Integer.parseInt(matcher.group(3));


我认为无论您做什么,都必须从头开始编写解析代码。最清晰的最终结果将为您创建一个实现DateFormat的类。

关于java - Java解析季度日期的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23540697/

10-09 07:29