如何在ISO 8601中格式化日期?例如:2009-06-15T13:45:30
是否有一种从Java生成它的标准方法,而无需使用字母模式创建DateTimeFormatter
?
我看到它在MS文档中使用: Standard Date and Time Format Strings
答案 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);
答案 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);
}