2

ユーザーの出身国の慣習に従って日付と時刻をフォーマットする必要があるJ2SEアプリケーションを作成します。Javaでこの問題を解決する方法を知りたいですか?おそらくSimpleDateFormatを使用しますが、国ごとにすべてのフォーマット文字列を個別に取得するよりも、何らかの方法でフォーマット文字列を取得できるのではないかと思います。

4

2 に答える 2

2

DateFormat すでにこれを行うことができます-DateTimeFormat.getDateTimeInstance(dateStyle, timeStyle, locale)ニーズに応じて、使用するか、同様のものを使用してください。

于 2012-04-13T15:00:39.823 に答える
1

java.time

java.utilDate-Time APIとそのフォーマットAPIはSimpleDateFormat古く、エラーが発生しやすいです。それらの使用を完全に停止し、最新の日時API *に切り替えることをお勧めします。

java.time最新の日時APIを使用したソリューション:

DateTimeFormatter.#ofLocalizedDateISO年表のロケール固有の日付形式を取得するために使用します。

デモ:

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

ONLINE DEMO

Trail: DateTimeから最新のDate-TimeAPIの詳細をご覧ください。


*何らかの理由で、Java6またはJava7に固執する必要がある場合は、 Java.time機能のほとんどをJava6および7にバックポートするThreeTen-Backportを使用できます。AndroidプロジェクトおよびAndroidAPIで作業している場合レベルはまだJava-8に準拠していません。脱糖によって利用可能なJava8+APIAndroidプロジェクトでのThreeTenABPの使用方法を確認してください。

于 2021-07-18T16:38:51.190 に答える