我正在尝试将以下字符串解析为
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
字母?
日期的真正问题不是 T & Z 而是毫秒。
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
这必须是要使用的格式,因为输入日期中也有毫秒。
你可以用这个
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();
}
java.time
2014 年 3 月,Java 8 引入了现代的
java.time
日期时间 API,取代了容易出错的旧版java.util
日期时间 API。任何新代码都应使用 java.time
API。
顺便说明一下,切勿在日期时间解析/格式化模式中指定
'Z'
,因为 'Z'
是字符文字,而 Z
是指定时区偏移量的模式字符。要解析表示时区偏移的字符串,您必须使用 X
(或 XX
或 XXX
,具体取决于要求)。
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 的更多信息。