问题描述
在 Java 中使用 SimpleDateFormat 类时出现以下异常。
java.text.ParseException: Unparseable date: "2021-03-21T06:02:30.279Z"
我的代码如下:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
我一直在关注位于 https://docs.oracle.com/javase/10/docs/api/java/text/SimpleDateFormat.html 的示例,所以我不确定为什么这不起作用。有人可以帮忙吗?
解决方法
使用模式,yyyy-MM-dd'T'HH:mm:ss.SSSX
演示:
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
System.out.println(simpleDateFormat.parseObject("2021-03-21T06:02:30.279Z"));
}
}
输出:
Sun Mar 21 06:02:30 GMT 2021
请注意,java.util
日期时间 API 及其格式 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API*。
使用现代日期时间 API:
import java.time.Instant;
public class Main {
public static void main(String[] args) {
System.out.println(Instant.parse("2021-03-21T06:02:30.279Z"));
}
}
输出:
2021-03-21T06:02:30.279Z
请注意,由于您的日期时间字符串已经符合 ISO 8601,因此对于基于 ISO 8601 的 java.time API,您不需要格式化程序/解析器.
从 Trail: Date Time 了解有关现代日期时间 API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。