String timeString = "20220601132050399";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime.parse(timeString,format);
这样就报错“java.time.format.DateTimeParseException: Text '20220601132050399' could not be parsed at index 0”。 但是如果随便什么东西把毫秒跟秒隔开就没问题比如:
20220601132050:399 yyyyMMddHHmmss:SSS
20220601132050 399 yyyyMMddHHmmss SSS
就都没问题。请问这是啥原因?
另外正向 format 是没问题的。
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime.now().format(format);
1
aguesuka 2022-06-07 12:02:55 +08:00
jdk11 和 17 分别测试了第一段代码, 没有复现
|
2
chendy 2022-06-07 12:10:01 +08:00
java8 复现,17 无法复现
目测是个 bug…… |
3
zhzy0077 2022-06-07 12:26:36 +08:00
|
4
yazinnnn 2022-06-07 12:45:23 +08:00
https://blog.csdn.net/kuailebuzhidao/article/details/118465230
csdn 还是有内容的 --------- 根据上述分析,只要让代码可以明确知道固定子序列宽度是 10 ,毫秒可变序列宽度是 3 即可。官方提供的方法是单独拼接毫秒并指定宽度。 public class TestDate { public static void main(String[] args) { DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss") .appendValue(ChronoField.MILLI_OF_SECOND, 3).toFormatter(); LocalDateTime datetime = LocalDateTime.parse("20210601140102123", formatter); System.out.println(datetime); String formatTime = datetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); System.out.println(formatTime); } } |