我有以下日期:2011-08-12T20:17:46.384Z
。这是什么格式?我正在尝试通过DateFormat.getDateInstance().parse(dateStr)
用Java1.4解析它,我得到了
java.text.ParseException:无法解析的日期:"2011-08-12T20:17:46.384Z“
我认为我应该使用SimpleDateFormat进行解析,但我必须首先知道格式字符串。到目前为止,我只知道yyyy-MM-dd
,因为我不知道这个字符串中的T
是什么意思--与时区相关的东西?此日期字符串来自Files CMIS download history media type上显示的lcmis:downloadedOn
标记。
发布于 2011-12-07 02:49:11
T只是分隔日期和时间的文字,Z表示“零小时偏移量”,也称为"Zulu时间“(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()
。
发布于 2016-04-23 00:20:40
tl;dr
您的输入字符串使用标准格式。
Instant.parse ( "2011-08-12T20:17:46.384Z" )
ISO 8601
这种格式是由合理的实用标准ISO 8601定义的。
T
将日期部分与时间部分分开。末尾的Z
表示UTC (即从UTC偏移0小时-分-秒)。Z
为pronounced “Zulu”。
java.time
与Java的最早版本捆绑在一起的旧的日期-时间类已经被证明是设计糟糕、令人困惑和麻烦的。避开他们。
取而代之的是,使用Java8和更高版本中内置的java.time框架。java.time类替代了旧的date-time类和非常成功的Joda-Time库。
在解析/生成日期-时间值的文本表示形式时,java.time类默认使用ISO 8601。
Instant
类表示UTC中时间轴上的某个时刻,分辨率为nanoseconds。这个类可以直接解析您的输入字符串,而无需定义格式化模式。
Instant instant = Instant.parse ( "2011-08-12T20:17:46.384Z" ) ;
关于java.time
框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.Date
、Calendar
和SimpleDateFormat
。
要了解更多信息,请参阅。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310。
现在在maintenance mode中的项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC driver。不需要字符串,也不需要java.sql.*
类。Hibernate 5和JPA2.2支持java.time。
从哪里获取java.time类?
中的
发布于 2011-12-07 02:48:39
不确定Java解析,但那是ISO8601:http://en.wikipedia.org/wiki/ISO_8601
https://stackoverflow.com/questions/8405087
复制相似问题