如何在ISO 8601中格式化日期?例如:2009-06-15T13:45:30
獲取ISO 8601日期格式,例如:2009-06-15T13:45:30
是否有從Java生成它的標準方式,而不必使用字母模式創建DateTimeFormatter
?
我看到它MS文檔中使用: Standard Date and Time Format Strings
如何在ISO 8601中格式化日期?例如:2009-06-15T13:45:30
獲取ISO 8601日期格式,例如:2009-06-15T13:45:30
是否有從Java生成它的標準方式,而不必使用字母模式創建DateTimeFormatter
?
我看到它MS文檔中使用: Standard Date and Time Format Strings
簡單的方式來獲得ISO 8601在Java中:
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);
}
我想這就是通常所說的「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
的一兩件事是明確的:你的例子去無任何時區信息;所以他們應該被認爲是「當地時間」。
在此字符串中,T只是表示爲<date>T<time>
的標準ISO 8601日期時間字符串中的時間分量。維基百科對此標準格式有一個detailed page。
在java中,你可以做到這一點使用它
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
我用GMT
這裏只是舉例。您可以根據需要設置時區。約TimeZone
在這裏得到更多的信息是文檔link
ISO-8601 在單個時間點可以通過連接一個完整的日期表達,字母T作爲分隔符,並有效的時間表達式來表示。例如,「2007-04-05T14:30」。
這種日期的格式是當地日期時間ISO 8601,沒有時區。 根據根據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);
更正:[ISO 8601](https://en.m.wikipedia.org/wiki/ISO_8601)標準定義並允許使用不帶偏移量*的「本地」日期 - 時間值。 –
感謝您檢閱我的回答@BasilBourque。答案現在更新:) –
https://en.wikipedia.org/wiki/ISO_8601 –
這是ISO 8601格式,您可以使用「s」(可排序)格式說明符(在C#中)格式化字符串。 – Evk
@Evk *幾乎* ISO 8601格式 - 缺少時區標識符。 – 1615903