解析日期字符串的问题

问题描述 投票:0回答:3

我正在尝试将以下字符串解析为

Date
对象:

2013-12-26T01:00:56.664Z

使用这个

SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

但是我得到了:

 java.text.ParseException: Unparseable date: "2013-12-26T01:00:56.664Z" (at offset 19)

我做错了什么,我应该如何处理日期中的

T
Z
字母?

java android parsing date simpledateformat
3个回答
6
投票

日期的真正问题不是 T & Z 而是毫秒。

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
这必须是要使用的格式,因为输入日期中也有毫秒。


0
投票

你可以用这个

String date = "2013-12-26T01:00:56.664Z";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
   System.out.println(sdf.parse(date)); // Result Thu Dec 26 01:00:56 CET 2013
} catch (ParseException e) {
   e.printStackTrace();
}

0
投票

java.time

2014 年 3 月,Java 8 引入了现代的

java.time
日期时间 API,取代了容易出错的旧版
java.util
日期时间 API
。任何新代码都应使用
java.time
API。

顺便说明一下,切勿在日期时间解析/格式化模式中指定

'Z'
,因为
'Z'
是字符文字,而
Z
是指定时区偏移量的模式字符。要解析表示时区偏移的字符串,您必须使用
X
(或
XX
XXX
,具体取决于要求)。

使用现代日期时间 API 的解决方案

由于您的日期时间字符串采用

Instant#parse
使用的默认格式,因此您可以直接将其解析为
Instant

演示:

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.parse("2013-12-26T01:00:56.664Z");
        System.out.println(instant);
    }
}

输出:

2013-12-26T01:00:56.664Z

在线演示

注意: 无论出于何种原因,如果您需要

java.util.Date
对象的
Instant
实例,您可以按如下方式操作:

java.util.Date date = Date.from(instant);

Trail:日期时间了解有关现代日期时间 API 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.