java - 在 Java 中解析 ISO 8601 日期格式,如 2015-06-27T13 :16:37. 363Z

标签 java date simpledateformat iso8601

<分区>

我正在尝试使用 SimpleDateFormat 解析 String

这是我当前的代码:

public String getCreatedDateTime() {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-ddEHH:mm:ss.zzzz");
    try {
        Date date = simpleDateFormat.parse("2015-06-27T13:16:37.363Z");
        return date.toString();
    } catch (ParseException e) {
        return "Error parsing date";
    }
}

如您所见,我只是在 parse() 方法中放置了一个常量用于测试目的。

所以,这就是我要解析的内容:

2015-06-27T13:16:37.363Z

这是我正在使用的 SimpleDateFormat 模式:

yyyy-MM-ddEHH:mm:ss.zzzz

我不断收到 ParseException。

我知道这可能是因为末尾有 .zzzz,但我不知道 .363Z 可能代表什么,所以我只是使用了一些随机字母。坏主意。

非常感谢您的帮助。谢谢!

最佳答案

尝试使用此模式(注意末尾的 X 和中间的“T”):

"yyyy-MM-dd'T'HH:mm:ss.SSSX"

来自 Java 的 SimpleDateFormat's documentation :

ISO 8601 Time zone:

...

For parsing, "Z" is parsed as the UTC time zone designator.

并且,从描述不同字符的部分开始:

X - Time zone - ISO 8601 time zone

编辑

如果使用 Android,则不支持“X”。

您可以使用此模式(注意 Z 现在是文字):

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"

但随后您将获得当前时区的日期,如果需要,需要将其转换为 UTC。

关于java - 在 Java 中解析 ISO 8601 日期格式,如 2015-06-27T13 :16:37. 363Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090946/

相关文章:

java - Java 中的 SNMP 代理 : How adding new rows in MOTable

java - 如何将操作连接到 ControlsFX 中的按钮?

hibernate - 如何在 hibernate 中执行日期操作

java - (简单)允许 24 :00:00 and 00:00:00 as inputs 的日期格式

java - Jersey 2.5 作为过滤器 http 状态 404

Java 和小数 E 数

mysql - 我想将日期列从 '26-01-2016' 格式反转为 '2016-01-26'

java - 将自纪元以来的毫秒时间转换为 "mm/dd/yy"

java - 求两个时间值之间的时间差始终给出 "Second"值 0

multithreading - 同一个执行器中的 Spark 任务如何共享变量(NumberFormatException 和 SimpleDateFormat)?