这是什么date格式? 2011-08-12T20:17:46.384Z
我有以下date: 2011-08-12T20:17:46.384Z
。 这是什么格式? 我试图parsing它与Java 1.4通过DateFormat.getDateInstance().parse(dateStr)
,我得到
java.text.ParseException:无法parsing的date:“2011-08-12T20:17:46.384Z”
我想我应该使用SimpleDateFormatparsing,但我必须先知道格式string。 我到目前为止所有的东西都是yyyy-MM-dd
,因为我不知道T
string在这个string中意味着什么 – 与时区有关? 此datestring来自Files CMIS下载历史logging介质types上显示的lcmis:downloadedOn
标记。
T只是一个字面意思,用来区分date和时间,Z表示“零时差”,也就是所谓的“祖鲁时间”(UTC)。 如果你的string总是有一个“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()
。
不知道Javaparsing,但这是ISO8601: http : //en.wikipedia.org/wiki/ISO_8601
TL;博士
Instant.parse ( "2011-08-12T20:17:46.384Z" )
ISO 8601
这种格式由合理的实际标准ISO 8601定义 。
T
将date部分与时间部分分开。 Z
最后是Zulu
缩写,意思是UTC 。
java.time
与最早版本的Java捆绑在一起的旧date时间类已被certificate是devise不佳,混乱和麻烦的。 避免他们。
相反,使用Java 8及更高版本中内置的java.time框架。 java.time类取代了旧的date时间类和高度成功的Joda-Time库。
在parsing/生成date时间值的文本表示时,java.time类默认使用ISO 8601 。
Instant
类表示UTC时间轴上的时间,分辨率为纳秒 。 这个类可以直接parsing你的inputstring,而不用麻烦定义一个格式化模式。
Instant instant = Instant.parse ( "2011-08-12T20:17:46.384Z" ) ;
解决这个问题的简单方法是用" "
replace"T"
" "
并删除.384Z
。
下面是如何实现这一目的的说明:
public static String getTime(String time) { if (time != null) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if (time.toUpperCase().contains("T") && time.toUpperCase().contains("Z")) { time = time.toUpperCase().replace("T", " "); String[] str = time.split("\\."); if (str.length != 0) { return str[0]; } } try { Date date = new Date(time); time = simpleDateFormat.format(date); } catch (Exception e) { // } } return time; }