2017-02-21 9 views
0

)ISO 8601で日付をフォーマットするにはどうすればよいですか?例:2009-06-15T13:45:30ISO 8601の日付形式を取得する(例:2009-06-15T13:45:30

文字パターンでDateTimeFormatterを作成しなくても、Javaから標準的な方法で生成できますか?

私はそれがMSのドキュメントで使用される参照してください。 Standard Date and Time Format Strings

+1

https://en.wikipedia.org/wiki/ISO_8601 –

+1

これは、ISO 8601フォーマットであり、 "s"(ソート可能)形式指定子(C#)を使用して、そのような文字列をフォーマットすることができます。 – Evk

+1

@Evk *ほとんど* ISO 8601形式です - タイムゾーン識別子がありません。 – 1615903

答えて

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); 
} 
3

私は、これは一般に「ISO」の日付と呼ばれていると思います。

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

明確にするために一つのこと:次のような例を与えるwikipediaに記載

]、あなたの例では、任意のタイムゾーン情報なしで行くの。彼らは「現地時間」とみなされるべきです。

3

この文字列では、Tは、標準ISO 8601の日付時刻文字列の時刻コンポーネントで、<date>T<time>で表されます。ウィキペディアはこの標準フォーマットについてです。 Javaで

、私はちょうど例えばここGMTを使用していた

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

にそれを使用するためにこれを行うことができます。必要に応じてタイムゾーンを設定できます。およそTimeZoneここではドキュメントであるlink

+1

「Z」はUTCを意味します(実際にはタイムゾーンはありません)。はい、GMTは何とかUTCですが、私は本当に正確であると思うので、あなたの例では「UTC」を使用するべきです。 – GhostCat

+0

GMTは「GMTはタイムゾーンで、UTCはタイムスタンダードです」と書かれていますので、getTimeZone()を試してみるとタイムゾーンが表示されます。^_^@GhostCat –

+0

私は同意する、これは本当に明確ではない。おそらく、より良い解決策は、あなたの答えに用語の一部を言及することでしょう。 – GhostCat

2

ISO-8601 をより多くの情報を取得するには、ある一時点における、完全な日付表現、区切り文字として文字T、および有効な時間表現を連結することによって表現することができます。たとえば、「2007-04-05T14:30」となります。

2

このような日付の形式は、タイムゾーンなしの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: Time zone designators

+0

修正:[ISO 8601](https://en.m.wikipedia.org/wiki/ISO_8601)標準で定義されており、オフセット*を持たない "local"日時値は*定義されています。 –

+0

私の答え、@BasilBourqueをお読みいただきありがとうございます。回答が更新されました:) –

関連する問題