1.9 这个日期格式是什么?2011-08-12T20:17:46.384Z | Java Debug 笔记

165 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

Debug 笔记 <这个日期格式是什么?2011-08-12T20:17:46.384Z>

提问

我有以下日期: 2011-08-12T20:17:46.384Z

这是什么格式?

我正在尝试通过Java 1.4解析它,

DateFormat.getDateInstance().parse(dateStr)并且得到了

java.text.ParseException:无法解析的日期:“ 2011-08-12T20:1746.384Z”

我认为我应该使用SimpleDateFormat

进行解析,但是我必须首先知道格式字符串。到目前为止yyyy-MM-dd,我所拥有的只是,因为我不知道T该字符串的含义是什么-与时区有关?此日期字符串来自文件CMIS下载历史记录媒体类型lcmis:downloadedOn上显示的标签。

回答一:

T只是将日期和时间分开的文字,Z表示“零时偏移”,也称为“祖鲁时间”(UTC)。如果您的字符串始终带有“ Z”,则可以使用:

SimpleDateFormat format = new SimpleDateFormat(
    "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));

或使用Joda Time

您可以使用ISODateTimeFormat.dateTime()

回答二:

tl; dr

输入字符串使用标准ISO 8601格式。

Instant.parse ( "2011-08-12T20:17:46.384Z" )

ISO 8601

此格式由实用标准ISO 8601定义。

将T日期部分与时间部分分开。该Z对端装置UTC(即,偏移从-UTC零小时-分钟-秒)。

java.time

事实证明,与最早的Java版本捆绑在一起的旧的日期时间类设计不佳,令人困惑且麻烦。避免他们。

相反,请使用Java 8及更高版本中内置的java.time框架。java.time类取代了旧的日期时间类和非常成功的Joda-Time库。

解析/生成日期时间值的文本表示时,java.time类默认使用ISO 8601

Instant级表示时间轴上的时刻UTC,分辨率为纳秒。该类可以直接解析您的输入字符串,而无需费心定义格式设置模式。

回答三:

还有其他解析方法,而不是第一个答案。要对其进行解析,请执行以下操作:

1.如果要获取有关日期和时间的信息,可以将其解析为ZonedDatetime(自Java 8以来)或Date(旧)对象:

// ZonedDateTime's default format requires a zone ID(like [Australia/Sydney]) in the end.
// Here, we provide a format which can parse the string correctly.
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME;
ZonedDateTime zdt = ZonedDateTime.parse("2011-08-12T20:17:46.384Z", dtf);

或者

// 'T' is a literal.
// 'X' is ISO Zone Offset[like +01, -08]; For UTC, it is interpreted as 'Z'(Zero) literal.
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX";

// since no built-in format, we provides pattern directly.
DateFormat df = new SimpleDateFormat(pattern);

Date myDate = df.parse("2011-08-12T20:17:46.384Z");

2.如果您不在乎日期和时间,而只想将信息视为以纳秒为单位的时刻,则可以使用Instant

// The ISO format without zone ID is Instant's default.
// There is no need to pass any format.
Instant ins = Instant.parse("2011-08-12T20:17:46.384Z");

文章翻译自Stack Overflow :stackoverflow.com/questions/8…