我有一个日期为APR-JUN10
或APR-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-MAR
,APR-JUN
,JUL-SEP
,OCT-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/