Java:将日期解析为可能包含也可能不包含时区信息的字符串
Java: Parsing Date as String which may or may not contain timezone info
目前我正在使用以下日期解析器来解析作为 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"));
}
它正确解析了前四种情况,但最后一种情况失败并出现以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2016-01-15T16:58:57.649-05:00" is malformed at "-05:00"
我理解它的失败,因为我在格式中附加了文字 Z
。但我期待它能作为时区解析器工作!
对于上述所有格式,是否有任何简单的方法可以使用带有可选参数的相同解析器?还是我需要根据得到的字符串使用不同的格式?
.appendLiteral('Z')
表示您期望这里的字母 'Z',没有别的。
使用 appendTimeZoneOffset(String zeroOffsetText, boolean showSeparators, int minFields, int maxFields)
来预期时区偏移。
例如:
.appendTimeZoneOffset("Z", true, 2, 2)
表示时区与小时和分钟的偏移量或 'Z' for "Zulu" (UTC)。
目前我正在使用以下日期解析器来解析作为 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"));
}
它正确解析了前四种情况,但最后一种情况失败并出现以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2016-01-15T16:58:57.649-05:00" is malformed at "-05:00"
我理解它的失败,因为我在格式中附加了文字 Z
。但我期待它能作为时区解析器工作!
对于上述所有格式,是否有任何简单的方法可以使用带有可选参数的相同解析器?还是我需要根据得到的字符串使用不同的格式?
.appendLiteral('Z')
表示您期望这里的字母 'Z',没有别的。
使用 appendTimeZoneOffset(String zeroOffsetText, boolean showSeparators, int minFields, int maxFields)
来预期时区偏移。
例如:
.appendTimeZoneOffset("Z", true, 2, 2)
表示时区与小时和分钟的偏移量或 'Z' for "Zulu" (UTC)。