ユーザーの出身国の慣習に従って日付と時刻をフォーマットする必要があるJ2SEアプリケーションを作成します。Javaでこの問題を解決する方法を知りたいですか?おそらくSimpleDateFormatを使用しますが、国ごとにすべてのフォーマット文字列を個別に取得するよりも、何らかの方法でフォーマット文字列を取得できるのではないかと思います。
2 に答える
DateFormat
すでにこれを行うことができます-DateTimeFormat.getDateTimeInstance(dateStyle, timeStyle, locale)
ニーズに応じて、使用するか、同様のものを使用してください。
java.time
java.util
Date-Time APIとそのフォーマットAPIはSimpleDateFormat
古く、エラーが発生しやすいです。それらの使用を完全に停止し、最新の日時API *に切り替えることをお勧めします。
java.time
最新の日時APIを使用したソリューション:
DateTimeFormatter.#ofLocalizedDate
ISO年表のロケール固有の日付形式を取得するために使用します。
デモ:
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtfDateFull = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
.localizedBy(new Locale("cs", "CZ"));
DateTimeFormatter dtfDateMedium = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
.localizedBy(new Locale("cs", "CZ"));
DateTimeFormatter dtfDateShort = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
.localizedBy(new Locale("cs", "CZ"));
LocalDate date = LocalDate.now(ZoneId.of("Europe/Prague"));
System.out.println(date.format(dtfDateFull));
System.out.println(date.format(dtfDateMedium));
System.out.println(date.format(dtfDateShort));
}
}
サンプル実行からの出力:
neděle 18. července 2021
18. 7. 2021
18.07.21
Trail: DateTimeから最新のDate-TimeAPIの詳細をご覧ください。
*何らかの理由で、Java6またはJava7に固執する必要がある場合は、 Java.time機能のほとんどをJava6および7にバックポートするThreeTen-Backportを使用できます。AndroidプロジェクトおよびAndroidAPIで作業している場合レベルはまだJava-8に準拠していません。脱糖によって利用可能なJava8+APIとAndroidプロジェクトでのThreeTenABPの使用方法を確認してください。