我正在做的是使用字符串时间戳并使用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
;无论如何,我想知道是否有更好的方法来解决这个问题。
显然,我只需更改format
和endTimeFormat
变量,但我不能忽略看似多余的date.setTime
,否则我们无法知道它是否有效。
答案 0 :(得分:2)
我会为两个SimpleDateFormats使用一个变量。这样它只需创建一次。注意:如果你把它作为一个字段,你需要在多个线程中使用时锁定它,或者你可以使用添加到Java 8的JSR-310库,它不需要锁定。
您可以查找:
,例如, format.contains(":")
,它将确定它必须匹配的格式。这将允许您有一个常见的try-catch块。