我实现了以下可用于将String转换为可接受格式的方法:
public static Date parseDate(final String dateString, final String[] acceptedFormats) {
for (String format : acceptedFormats) {
try {
return new SimpleDateFormat(format).parse(dateString);
} catch (ParseException e) {
// dateString does not have this format
}
}
return null; // dateString does not match any accepted format
}
正如我从一些Java书籍中读到的那样,s not a good practice to use exceptions to control the flow. In this case, I use an empty catch block and that
不是一个好习惯。你能帮我写一个方法,以不同的方式做同样的事情吗?
我不得不提到我不允许使用外部库(我知道有一个来自apachee的lib可以很好地做这件事)
答案 0 :(得分:1)
您可以使用parse
的重载,该重载需要ParsePosition
:
public static Date parseDate(final String dateString, final String[] acceptedFormats) {
ParsePosition position = new ParsePosition(0);
for (String format : acceptedFormats) {
// TODO: Specify time zone and locale
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = format.parse(text, position);
if (date != null && position.getIndex() == text.length()) {
return date;
}
position.setIndex(0);
}
return null; // dateString does not match any accepted format
}
请注意检查解析位置是字符串的长度 - 这可以防止在解析文本部分的情况下出现误报,但还有更多错误 - 例如a格式" yyyy-MM-dd"和#34; 2015-07-02T15:40"。
的文本