我已经使用JodaTime 2.7进行了测试,并找到了两种方法:
使用DateTimeFormatterBuilder
的可选解析器:
// create parser for "GMT"
DateTimeParser gmtParser = DateTimeFormat.forPattern("ZZZ").getParser();
// create parser for "+0200"
DateTimeParser offsetParser = DateTimeFormat.forPattern("Z").getParser();
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("EEE, dd MMM yyyy HH:mm:ss ") // common pattern
.appendOptional(gmtParser) // optional parser for GMT
.appendOptional(offsetParser) // optional parser for +0200
.toFormatter().withLocale(Locale.ENGLISH).withOffsetParsed();
DateTimeFormatterBuilder
可以接收可用于解析不同输入的解析器数组:
// create array with all possible patterns
DateTimeParser[] parsers = {
DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss Z").getParser(),
DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss ZZZ").getParser()
};
// create a formatter using the parsers array
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(null, parsers) // use parsers array
.toFormatter().withLocale(Locale.ENGLISH).withOffsetParsed();
使用上述任何解决方案,formatter
都将适用于两种输入:
System.out.println(formatter.parseDateTime("Wed, 02 Oct 2002 13:00:00 GMT"));
System.out.println(formatter.parseDateTime("Wed, 02 Oct 2002 15:00:00 +0200"));
输出将是:
2002-10-02T13:00:00.000Z
2002-10-02T15:00:00.000+02:00
注意:我相信如果您在所有模式中都有共同的部分并且它们之间的差异很小,那么第一个解决方案会更好。如果模式彼此非常不同,则第二种解决方案会更好。但我也相信这是一个见仁见智的问题,由你来选择。