SimpleDateFormat尝试解析,避免空catch块

时间:2015-07-02 14:35:11

标签: java simpledateformat

我实现了以下可用于将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可以很好地做这件事)

1 个答案:

答案 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"。

的文本