使用Try-Catch块的多个组合 - Java

时间:2015-08-09 21:05:16

标签: java performance parsing try-catch

我正在做的是使用字符串时间戳并使用SimpleDateFormat类解析它们以便在日历中使用。但是,这些时间戳可以有多种格式,例如时间(上午10:30对比上午10点)

我在这个日历上创建了开始和结束时间,因此,如果开始时间不是我们典型的hh:mmaa的格式,我不仅要处理ParseExceptions,而且我还需要#&# 39;我们担心两者的结合。这里有什么可行,但我觉得效率极低。

// Combination #1 -----------------------------------------------------
DateFormat format = new SimpleDateFormat("EEE MMM dd, yyyy hh:mmaa zzz");
DateFormat endTimeFormat = new SimpleDateFormat("EEE MMM dd, yyyy hh:mmaa  zzz");
Calendar date = Calendar.getInstance();
Calendar endTime = Calendar.getInstance();
try {
    date.setTime(format.parse(rawStartDate));
    endTime.setTime(endTimeFormat.parse(rawEndDate)));
} catch (ParseException e) {
    try {
        // Combination #2 ----------------------------------------
        format = new SimpleDateFormat("EEE MMM dd, yyyy hhaa zzz");
        endTimeFormat = new SimpleDateFormat("EEE MMM dd, yyyy hhaa  zzz");
        date.setTime(format.parse(rawStartDate));
        endTime.setTime(endTimeFormat.parse(rawEndDate)));
    } catch (ParseException ee) {
        //onto another iteration until our combination runs out THEN report the exception
        // start being hh:mmaa
        // end being hhaa -- etc etc
    }
}

当然这段代码很奇怪,可能不正确使用Calendar;无论如何,我想知道是否有更好的方法来解决这个问题。

显然,我只需更改formatendTimeFormat变量,但我不能忽略看似多余的date.setTime,否则我们无法知道它是否有效。

1 个答案:

答案 0 :(得分:2)

我会为两个SimpleDateFormats使用一个变量。这样它只需创建一次。注意:如果你把它作为一个字段,你需要在多个线程中使用时锁定它,或者你可以使用添加到Java 8的JSR-310库,它不需要锁定。

您可以查找:,例如, format.contains(":"),它将确定它必须匹配的格式。这将允许您有一个常见的try-catch块。