次のコードで /* 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
- FormatStyle.SHORT
- FormatStyle.MEDIUM
- FormatStyle.LONG
- FormatStyle.FULL
- 該当なし、もしくはコンパイルエラー
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
4: FormatStyle.FULL
DateTimeFormatter.ofLocalizedDate()
の引数には、
FormatStyle
の値を指定する必要があります。
例として、
FormatStyle.SHORT
、FormatStyle.MEDIUM
FormatStyle.LONG
、FormatStyle.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
オブジェクトに変換しています。ここで、先ほど作成したDateTimeFormatter
のpattern
を使用して、指定された形式の日付文字列をパースしています。
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");
よって本コードでは問題なくインスタンスを取得できています。