tl;dr
String output =
ZonedDateTime.now ( ZoneId.of ( "Europe/Madrid" ) )
.format (
DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL )
.withLocale ( new Locale ( "es" , "ES" ) )
)
;
martes 2016 年 7 月 12 日
詳細
Affeによって受け入れられた Answerは正しいです。Locale
オブジェクトを正しく構築していませんでした。
java.time
質問と回答はどちらも、Java 8 以降に組み込まれたjava.timeフレームワークに取って代わられた古い時代遅れのクラスを使用しています。これらのクラスは、 などの古い面倒な日時クラスに取って代わりますjava.util.Date
。Oracle チュートリアルを参照してください。java.time 機能の多くは、ThreeTen-Backportで Java 6 および 7 にバックポートされ、さらにThreeTenABPで Android に適合されています。
これらのクラスには、DateTimeFormatter
日時値から文字列を生成するときにテキストの形式を制御する が含まれています。明示的なフォーマット パターンを指定できます。しかし、なぜわざわざ?クラスが自動的にフォーマットを人間の言語と特定の文化的規範にローカライズしますLocale
。
たとえば、マドリッドの地域タイム ゾーンで現在の時刻を取得します。
ZoneId zoneId = ZoneId.of( "Europe/Madrid" );
ZonedDateTime zdt = ZonedDateTime.now( zoneId );
// example: 2016-07-12T01:43:09.231+02:00[Europe/Madrid]
フォーマッタをインスタンス化して、その日時値を表す文字列を生成します。テキストの長さをFormatStyle
(フル、ロング、ミディアム、ショート) で指定します。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.FULL );
a を適用して、フォーマッタに割り当てられている JVM の現在のデフォルトLocale
を置き換えます。 Locale
Locale locale = new Locale ( "es" , "ES" );
formatter = formatter.withLocale ( locale );
フォーマッタを使用して String オブジェクトを生成します。
String output = zdt.format ( formatter );
// example: martes 12 de julio de 2016
コンソールにダンプします。
System.out.println ( "zdt: " + zdt + " with locale: " + locale + " | output: " + output );
zdt: 2016-07-12T01:43:09.231+02:00[ヨーロッパ/マドリッド] ロケール: es_ES | 出力: martes 12 de julio de 2016