获得ISO 8601日期格式,例如:2009-06-15T13:45:30

时间:2017-02-21 10:31:14

标签: java c# date datetime

如何在ISO 8601中格式化日期?例如:2009-06-15T13:45:30

是否有一种从Java生成它的标准方法,而无需使用字母模式创建DateTimeFormatter

我看到它在MS文档中使用: Standard Date and Time Format Strings

5 个答案:

答案 0 :(得分:3)

我认为这通常被称为“ISO”日期。

wikipedia]中记录,举例如:

Date:   2017-02-21
Combined date and time in UTC:  2017-02-21T10:26:42+00:00
                                2017-02-21T10:26:42Z
                                20170221T102642Z

有一点需要明确:您的示例没有任何时区信息;所以他们应该被假定为“当地时间”。

答案 1 :(得分:3)

在此字符串中, T 只是标准ISO 8601日期时间字符串中的时间组件,表示为<date>T<time>。维基百科有关于此标准格式的detailed page

在java中,你可以这样做来使用它

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

我这里仅使用GMT。您可以根据需要设置时区。要获取有关TimeZone的更多信息,请参阅文档link

答案 2 :(得分:2)

ISO-8601 单个时间点可以通过连接完整的日期表达式,字母T作为分隔符和有效的时间表达式来表示。例如,&#34; 2007-04-05T14:30&#34;。

答案 3 :(得分:2)

此日期的格式是ISO 8601的本地日期时间,没有时区。 1 根据维基百科,根据ISO 8601表示的日期和时间是:

Date:                           2017-02-21

Combined date and time in UTC:  2017-02-21T12:34:46+00:00
                                2017-02-21T12:34:46Z
                                20170221T123446Z
...

有几种方法可以在Java中使用这种格式创建字符串。在Java 8中,最简单的方法是使用LocalDateTime的内置解析模式。我之所以不使用ZonedDateTime,原因是该日期的时区未知。

// str -> date
LocalDateTime d = LocalDateTime.parse("2009-06-15T13:45:30");

// date -> str
String text = d.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);

1 ISO 8601: Time zone designators

答案 4 :(得分:0)

使用Java获取ISO 8601的简便方法:

static void time() {
    final DateTimeFormatter fmt = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
    OffsetDateTime.now().truncatedTo(ChronoUnit.SECONDS).format(fmt);
    Instant.now().atOffset(ZoneOffset.ofHours(1)).truncatedTo(ChronoUnit.SECONDS).format(fmt);
    Instant.now().atOffset(ZoneOffset.UTC).truncatedTo(ChronoUnit.SECONDS).format(fmt);
    OffsetDateTime.parse("2007-12-03T10:15:30+01:00").format(fmt);
    LocalDateTime.parse("2009-06-15T13:45:30").format(fmt);
}