我试图转换日期字符串2019-08-07T20:11:59.6250889 + 09:30 转换为LocalDateTime格式yyyy-MM-dd HH:mm:ss格式
String date = "2019-08-07T20:11:59.6250889+09:30";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
LocalDateTime startDate = LocalDateTime.parse(date, format);
堆栈跟踪
Exception in thread "main" java.time.format.DateTimeParseException: Text '2019-08-07T20:11:59.6250889+09:30' could not be parsed at index 23
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at Testing.main(Testing.java:11)
答案 0 :(得分:1)
您的格式是内置的。
String date = "2019-08-07T20:11:59.6250889+09:30";
DateTimeFormatter format = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
LocalDateTime startDate = LocalDateTime.parse(date, format);
System.out.println(startDate);
输出:
2019-08-07T20:11:59.625088900
格式为ISO8601。用于ISO 8601最重要变体的格式化程序内置在java.time中。因此,不要为编写自己的格式模式字符串而苦恼。只需使用预定义的DateTimeFormatter.ISO_OFFSET_DATE_TIME
。
@shmosel在注释中是正确的:DateTimeFormatter
从字面上取小数位数,因此要解析7个小数的小数,您将需要SSSSSSS
(7 S
)。 java.time还具有解析可变小数位数的功能。为此,您需要一个DateTimeFormatterBuilder
及其appendFraction
方法。
您的问题标题是否意味着您想要在UTC抽时间?这将需要进行显式转换(因为您的字符串与UTC的偏移量为+09:30):
LocalDateTime startDate = OffsetDateTime.parse(date)
.withOffsetSameInstant(ZoneOffset.UTC)
.toLocalDateTime();
2019-08-07T10:41:59.625088900
链接