如果 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"
格式的字符串,大多数情况下效果很好;例如,那些工作正常:
"2022-03-16T12:09:56.267Z"
"2022-03-16T12:11:55.017+03:00"
问题出在完全有效的 ISO 字符串上,这些字符串恰好使用少于三位数字表示毫秒:
"2022-03-16T09:18:31.9Z"
它抛出这个异常: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 好得多。
我正在尝试将字符串解析为 java.util.Date
。
目前,我正在使用 SimpleDateFormat
,使用 "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
格式的字符串,大多数情况下效果很好;例如,那些工作正常:
"2022-03-16T12:09:56.267Z"
"2022-03-16T12:11:55.017+03:00"
问题出在完全有效的 ISO 字符串上,这些字符串恰好使用少于三位数字表示毫秒:
"2022-03-16T09:18:31.9Z"
它抛出这个异常: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 好得多。