我有一些日期提到的数据为" 2013-06-30 00:00:00 + 00:00"。我检查了不同的日期格式,但无法找到这个。有人可以帮忙吗?
答案 0 :(得分:3)
这是ISO 8601格式的日期,日期和时间之间省略了T
(请参阅:In an ISO 8601 date, is the T character mandatory?)
答案 1 :(得分:2)
关于你的问题"什么格式"这就是说,从技术上讲,这种格式是 ISO 8601的可选变体。 standard allows T
将替换为SPACE,并在通信方之间达成共识。
使用SPACE可以使字符串更容易被人类阅读,而缺乏正确的数字字体。但严格来说,这个SPACE版本不是标准版本,因此在系统之间交换数据或将数据序列化为文本时应包含T
。
其他答案都是正确的。这是解析的简单方法。
您的输入字符串几乎符合标准ISO 8601格式。用T
替换中间的空格以完全符合。
String input = "2013-06-30 00:00:00+00:00".replace( " " , "T" );
java.time类取代了麻烦的旧遗留日期时间类。在解析/生成字符串时,这些较新的类默认支持ISO 8601格式。
OffsetDateTime odt = OffsetDateTime.parse( input );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 2 :(得分:1)
我想它应该是YYYY-MM-DD 00:00:00+000
0而不是YYYY-MM-DD 00:00:00+00:00
。
此格式为yyyy-MM-dd HH:mm:ss.SSSZ
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ");
Date date = new Date();
System.out.println(dateFormat.format(date));
其他不同的日期格式是
yyyy-MM-dd 1969-12-31
yyyy-MM-dd 1970-01-01
yyyy-MM-dd HH:mm 1969-12-31 16:00
yyyy-MM-dd HH:mm 1970-01-01 00:00
yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800
yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000
yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800
yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000
yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800
yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000
答案 3 :(得分:0)
如果您使用的是Java 7+,则可以仅将X
模式字符串用于ISO8601时区。对于您给定的字符串,下面将起作用:
LocalDate lt = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssXXX"));
答案 4 :(得分:0)
我在这里添加这个答案,因为仍然有很多人在他们的项目中使用Java 6、7。
Calendar cal = new GregorianCalendar();
try {
Date paredDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").parse(s);
cal.setTime(paredDate);
return cal;
} catch (ParseException ex) {
ex.printStackTrace();
return null;
}
您可以使用以上格式+ OO:OO表示使用的时区
答案 5 :(得分:0)
根据ISO 8601表示的日期和时间例如
2020-10-11T00:00:00+00:00
要么
2020-10-11T00:00:00.000+00:00
。
将ISO 8601转换为java.util.Date
有点棘手。
我们可以使用java的simpleDateformat API进行转换。
sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");