使用Java SimpleDataFormatClass时发生ParseException

使用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中使用SimpleDataFormat类时,我遇到以下异常

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。