1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java gold 例題 Locale, DateTimeFormatter

Last updated at Posted at 2024-08-10

次のコードで /* insert code */部分に入力すると下記の出力結果が得られるものはどれでしょうか

public class ParseTest {

	public static void main(String[] args) {
        Locale.setDefault(Locale.US);
		var pattern = DateTimeFormatter.ofPattern("yyyy MM dd");
		String Sdate = "2020 07 22";
		LocalDate date = LocalDate.parse(Sdate, pattern);
		
		Locale[] locales = {
				new Locale.Builder().setLanguage("en").setRegion("US").build(),
				new Locale("ja", "JP"),
				Locale.ITALY,
				Locale.KOREA,
				Locale.GERMANY
        };
		
		for(Locale loc: locales) {
			var fmt = 
               DateTimeFormatter.ofLocalizedDate(/* insert code */).localizedBy(loc);
			
            System.out.println("country  : " + loc.getDisplayCountry());
			System.out.println("language : " + loc.getDisplayLanguage());
			System.out.println(fmt.format(date) + "\n");
		}
	}
}

出力

country  : United States
language : English
Wednesday, July 22, 2020

country  : Japan
language : Japanese
2020年7月22日水曜日

country  : Italy
language : Italian
mercoledì 22 luglio 2020

country  : South Korea
language : Korean
2020 7 22 수요일

country  : Germany
language : German
Mittwoch, 22. Juli 2020
  1. FormatStyle.SHORT
  2. FormatStyle.MEDIUM
  3. FormatStyle.LONG
  4. FormatStyle.FULL
  5. 該当なし、もしくはコンパイルエラー

4: FormatStyle.FULL

DateTimeFormatter.ofLocalizedDate()の引数には、
FormatStyleの値を指定する必要があります。
例として、
FormatStyle.SHORTFormatStyle.MEDIUM
FormatStyle.LONGFormatStyle.FULL
があります。

localizedBy(loc)で特定のロケールにもとづいてフォーマットを行います。
locがJAPAN

FormatStyle.SHORTの場合

2020/07/22

FormatStyle.MEDIUMの場合

2020/07/22

FormatStyle.LONGの場合

2020年7月22日

FormatStyle.FULLの場合]

2020年7月22日水曜日

よってFormatStyle.FULLが正解です。

補足

Locale.setDefault(Locale.US);

デフォルトロケールの設定をUSに変更しています。
デフォルトロケールの設定を削除すると本コードの出力結果の
country, languageが日本語で表示されます。

country  : アメリカ合衆国
language : 英語
Wednesday, July 22, 2020

country  : 日本
language : 日本語
2020年7月22日水曜日

country  : イタリア
language : イタリア語
mercoledì 22 luglio 2020

country  : 韓国
language : 韓国語
2020년 7월 22일 수요일

country  : ドイツ
language : ドイツ語
Mittwoch, 22. Juli 2020

次のコード

var pattern = DateTimeFormatter.ofPattern("yyyy MM dd");

DateTimeFormatterは、日時を特定の形式でフォーマットするためのクラスです。ここでは、"yyyy MM dd"というパターンで日付をフォーマットするためのフォーマッターを作成しています。
あくまで読みこみ時に利用するため、この形式で出力されるわけではありません。

String Sdate = "2020 07 22";

フォーマットされた日付の文字列が用意されています。

LocalDate date = LocalDate.parse(Sdate, pattern);

Sdateの文字列をLocalDateオブジェクトに変換しています。ここで、先ほど作成したDateTimeFormatterpatternを使用して、指定された形式の日付文字列をパースしています。

System.out.println("country : " + loc.getDisplayCountry());

ロケールの国名を取得して表示しています。

System.out.println("language : " + loc.getDisplayLanguage());

ロケールの言語名を取得して表示しています。

Locale[] locales = 

部分ではロケールのインスタンスを取得し、配列localesに代入しています。
インスタンスを取得する方法は以下の例があります。

・ コンストラクタを使う

Locale loc = new Locale("ja");
Locale location = new Locale("ja", "JP");

・定数を使う

Locale loc = Locale.JAPAN

locale.Builderを使う

Locale loc = new Locale.Builder().setLanguage("ja").setRegion("JP").build();

getDefault()を使う

Locale loc = getDefault();

forLanguageTagを使う

Locale loc = Locale.forLanguageTag("en-US");

よって本コードでは問題なくインスタンスを取得できています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?