将字符串解析为LocalDateTime,并带有可选的尾随截断的零

问题描述 投票:1回答:2

从API传递的字符串通常遵循yyyy-MM-dd HH:mm:ss.SSS格式,但是当时间戳中有结尾的0时,它们会被截断,例如2019-07-16 13:29:15.100转换为2019-07-16 13:29:15.12019-07-16 13:29:15.110转换为2019-07-16 13:29:15.11。我有一个可行的解决方案,只需在结尾处加零即可,但这感觉上可以通过DateTimeFormatter字符串中的可选部分解决。我最接近可行的解决方案如下:

String toParse = "2019-07-16 13:29:15.111";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.[S[S[S]]]]");
LocalDateTime timestamp = LocalDateTime.parse(toParse, formatter);

这适用于所有尾随零被截断的情况,但对于毫秒中所有数字都不为零的情况则不适用。错误消息是

java.time.format.DateTimeParseException: Text '2019-07-16 13:29:15.111' could not be parsed, unparsed text found at index 21

这只是括号放置的问题吗?我正在使用Java 8,我们无法更改API传递的内容。

java string parsing datetime-format
2个回答
0
投票

我对这些可选的括号不是很完美,但是您始终可以使用DateTimeFormatter使用可选的毫秒创建DateTimeFormatterBuilder。>

DateTimeFormatter formatter1 = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd HH:mm:ss")
                                    .optionalStart()
                                    .appendFraction(ChronoField.MILLI_OF_SECOND, 0, 3, true)
                                    .optionalEnd()
                                    .toFormatter();

0
投票

使用内置部件

© www.soinside.com 2019 - 2024. All rights reserved.