Java 从包含毫秒的字符串分析ZoneDateTime
我需要从以下格式的字符串中获取ZoneDateTime:Java 从包含毫秒的字符串分析ZoneDateTime,java,java-8,date,Java,Java 8,Date,我需要从以下格式的字符串中获取ZoneDateTime: "26.06.2019T00:00:00.123+03:00" 此格式似乎是标准格式,因此我使用以下代码从字符串解析ZoneDateTime: ZonedDateTime.parse("26.06.2019T00:00:00.123+03:00"); 但是,我有一个例外: Exception in thread "main" java.time.format.DateTimeParseException: Text '26.06.20
"26.06.2019T00:00:00.123+03:00"
此格式似乎是标准格式,因此我使用以下代码从字符串解析ZoneDateTime:
ZonedDateTime.parse("26.06.2019T00:00:00.123+03:00");
但是,我有一个例外:
Exception in thread "main" java.time.format.DateTimeParseException: Text '26.06.2019T00:00:00.123+03:00' could not be parsed at index 0
您使用的格式不是标准格式,因为您使用dd.mm.yyyy作为日期,而不是yyyy-mm-dd。因此,它与parse使用的默认格式设置程序不兼容 您可以为您的特殊情况轻松设置自定义DateTimeFormatter:
String pattern = "dd.MM.yyyy'T'HH:mm:ss.SSSXXX";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
String input = "26.06.2019T00:00:00.123+03:00";
ZonedDateTime zonedDateTime = ZonedDateTime.parse(input, dtf);
System.out.printlnzonedDateTime的输出为正确的ISO格式:
2019-06-26T00:00:00.123+03:00
根据,我建议您使用实际的标准格式,并尝试说服向您提供这些字符串的人也使用实际的ISO格式。javaDoc:从文本字符串(如2007-12-03T10:15:30+01:00[Europe/Paris])获取ZonedDateTime的实例默认格式设置为ISO_ZONED_DATE_TIME,在此处查看其格式:。此格式似乎是标准格式->否。它看起来很像ISO格式,但它扰乱了日期字段的顺序。首先是年,然后是月,然后是日。基本上从大到小。ISO也使用破折号而不是点。分隔日期字段。您需要将日期格式更改为2019-06-26T00:00:00.123+03:00年-月-日,或者使用自定义日期时间格式,因为没有默认的日期时间格式接受日.月.年格式。它几乎是标准ISO-8601格式,但不完全是。你从哪里得到这种格式的字符串?告诉提供这些字符串的人使用实际的ISO-8601格式,使用yyyy-MM-dd而不是dd.MM.yyyy,而不是这样一种奇怪的、令人困惑的、几乎不是真正标准的格式。