目前我使用以下日期解析器来解析以String
传递的日期:
public static final DateTimeParser FRACTION_PARSER = new DateTimeFormatterBuilder()
.appendLiteral('.').appendFractionOfSecond(0, 3).toParser();
public static final DateTimeFormatter DATE_FORMATTER = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendOptional(FRACTION_PARSER).appendLiteral('Z')
.toFormatter();
我有以下条件要解析:
public static void main(String[] args) {
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19.679Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19.67Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19.6Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-13T13:38:19Z"));
System.out.println(DATE_FORMATTER.parseDateTime("2016-01-15T16:58:57.649-05:00"));
}
它正确地解析了前四个案例但是对于最后一个案例失败了以下错误:
线程中的异常" main" java.lang.IllegalArgumentException:格式无效:" 2016-01-15T16:58:57.649-05:00"在" -05:00"
时格式不正确
我理解它的失败,因为我将文字Z
附加到格式中。但是我期待它能够作为timeZone解析器工作!
对于所有上述格式,是否有任何简单的方法可以使用带有可选参数的相同解析器?或者我需要使用不同的格式,具体取决于我得到的字符串?
答案 0 :(得分:2)
.appendLiteral('Z')
表示您希望字母“Z'在这里,没有别的。
请改用appendTimeZoneOffset(String zeroOffsetText, boolean showSeparators, int minFields, int maxFields)
来预期时区偏移。
例如:
.appendTimeZoneOffset("Z", true, 2, 2)
表示时区偏移,小时和分钟或“Z'为"祖鲁" (UTC)。