使用Java SimpleDataFormatClass时发生ParseException
在Java中使用SimpleDataFormat类时,我遇到以下异常使用Java SimpleDataFormatClass时发生ParseException,java,android,simpledateformat,Java,Android,Simpledateformat,在Java中使用SimpleDataFormat类时,我遇到以下异常 java.text.ParseException: Unparseable date: "2021-03-21T06:02:30.279Z" 我的代码如下所示: SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 我一直在遵循位于的示例,因此我不确定为什么这不起
java.text.ParseException: Unparseable date: "2021-03-21T06:02:30.279Z"
我的代码如下所示:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
我一直在遵循位于的示例,因此我不确定为什么这不起作用。有人能帮忙吗?使用模式,
yyyy-MM-dd'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
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
输出:
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
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
请注意,java.util
date-time API及其格式化API,SimpleDataFormat
已经过时且容易出错。建议完全停止使用,并切换到*
使用现代日期时间API:
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
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
输出:
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
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的java.time API,不需要格式化程序/解析器
从了解有关现代日期时间API的更多信息
*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。
我建议您不要使用
SimpleDateFormat
和Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。而是使用Instant
或OffsetDateTime
;两者都来自。在第一个链接到原始答案时,请注意接受的答案是错误的。很好。这是我在Android Studio中开发的应用程序。我认为问题在于Instant类与早期的API版本不兼容。您可以使用Instant
和其他java.time-through类。谢谢,这似乎已经奏效了。我需要复习一下我是否应该改上速成班。我不确定它是否兼容早期的Android API。非常欢迎您。您可以通过API desugaring或ThreeTenABP将Instant
与较低版本的Android一起使用。我已经在脚注中添加了相关链接。如果您需要将instant
传递给一个需要Date
的旧方法,只需在调用该方法时转换:legacyMethod(Date.from(yourInstant))
如果使用desugaring,或者legacyMethod(DateTimeUtils.toDate(yourInstant))
如果使用ThreeTenABP。