如果 SimpleDateFormat ISO 少于 3 位数字,则在解析毫秒时会遇到问题

SimpleDateFormat ISO having problems parsing the milliseconds if they have less than 3 digits

我正在尝试将字符串解析为 java.util.Date

目前,我正在使用 SimpleDateFormat,使用 "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 格式的字符串,大多数情况下效果很好;例如,那些工作正常:

问题出在完全有效的 ISO 字符串上,这些字符串恰好使用少于三位数字表示毫秒:

它抛出这个异常:java.text.ParseException: Unparseable date: "2022-03-16T09:18:31.9Z"

有办法处理这些吗?请记住,我需要 return 一个 java.util.Date,但使用 SimpleDateFormat 是可选的。

我正在使用 Java 8.

这是一种方法。

  • 注意 Z 代表祖鲁语。
  • 还要记住 Date 不存储任何时区信息。
  • 如有必要,您可以在转换为 Date 之前修改 ZonedDateTime 实例。
Instant d = Instant.parse("2022-03-16T09:18:31.9Z");
Date date = Date.from(d);
System.out.println(d);
System.out.println(date);

打印

2022-03-16T09:18:31.900Z
Wed Mar 16 05:18:31 EDT 2022

我建议您尝试转换为使用 java.time 包中的 类,因为它们比 Date 好得多。