43

私は単純な日付形式を実行しようとしています。うまく機能します。非常に簡単ですが、問題は言語です。「水曜日」の代わりに「Miércoles」を取得するためにロケール「es_ES」を使用し、そのように並べ替えましたが、失敗しました。

これが私のコードです:

SimpleDateFormat formato = 
    new SimpleDateFormat("EEEE d 'de' MMMM 'de' yyyy", new Locale("es_ES"));
String fecha = formato.format(new Date());

fecha文字列の期待値は次のとおりです。

2012 年 4 月 4 日 Miércoles

しかし、私はまだ取得しています:

2012 年 4 月 4 日水曜日

私は何を間違っていますか?

4

5 に答える 5

88

「es_ES」は言語 + 国です。各パーツを個別に指定する必要があります。

のコンストラクタは次のLocaleとおりです。

new Locale("es", "ES");es_ES に対応する Locale を取得します。

ただし、Locale.forLanguageTag("es-ES")整形式の IETF BCP 47 言語タグes-ES( の-代わりに) を使用して を使用することをお勧めします。このメソッドは、常に新しいものを作成するのではなく_、キャッシュされた を返すことができるためです。Locale

于 2012-04-04T20:56:16.170 に答える
5

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.DateOracle チュートリアルを参照してください。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

于 2016-07-11T23:30:45.057 に答える
4

Java 8

LocalDate today = LocalDate.now();
String day = today.getDayOfWeek().getDisplayName(TextStyle.FULL, new Locale("es","ES")));

月間も機能します。

于 2016-08-24T22:27:12.973 に答える
1
    Locale esLocale = new Locale("es", "ES");//para trabajar en español
    SimpleDateFormat formatter = new SimpleDateFormat(strFormatoEntrada, esLocale);//El formato con que llega mi strFecha más el lenguaje
于 2016-08-17T03:03:16.557 に答える