这是哪种Java日期格式" YYYY-MM-DD 00:00:00 + 00:00"?

时间:2014-12-05 09:47:40

标签: java date simpledateformat

我有一些日期提到的数据为" 2013-06-30 00:00:00 + 00:00"。我检查了不同的日期格式,但无法找到这个。有人可以帮忙吗?

6 个答案:

答案 0 :(得分:3)

这是ISO 8601格式的日期,日期和时间之间省略了T(请参阅:In an ISO 8601 date, is the T character mandatory?

答案 1 :(得分:2)

ISO 8601的可选变体

关于你的问题"什么格式"这就是说,从技术上讲,这种格式是 ISO 8601的可选变体standard allows T将替换为SPACE,并在通信方之间达成共识。

使用SPACE可以使字符串更容易被人类阅读,而缺乏正确的数字字体。但严格来说,这个SPACE版本不是标准版本,因此在系统之间交换数据或将数据序列化为文本时应包含T

使用java.time

其他答案都是正确的。这是解析的简单方法。

您的输入字符串几乎符合标准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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 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");