SimpleDateFormat .formatは()Java11対Java8で異なる結果を与えます

Siaynoq:

私は、コードのこの小さな作品を持っています:

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {

    public static void main(String[] args) {

        SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");

        System.out.println(format.format(new Date()));

    }
}

Javaの8を使用すると、出力は次のようになります。

Tue, 16 Jul 2019 13:16:54 AEST

Javaの11の場合:

Tue., 16 Jul. 2019 13:16:54 AEST

なぜ違いがあり、どのように私はそれが両方のJavaバージョンで均等に動作させるために自分のコードを変更する必要がありますか?

私が実際に使用したハンドルバーを)...同じフォーマット文字列に同じ結果を生成するためにハンドルを使用する方法を知っているが、それはクールになる-この問題を見つけながら、私はJavaのバージョンにダウン、それを絞り込むことができ

オレVV:

TL; DR

システムプロパティと(Javaの11を含む)は、後にJava 9を実行し、java.locale.providers次のように定義されました:

java -Djava.locale.providers=COMPAT,CLDR YourApp

今、出力は、Java 8のように、例えば同じ形式で、ドットなしです。

火曜、2019年7月16日夜02時24分15秒AEST

CLDR

Javaは、4つのソースまでの週の日と異なる言語でヶ月間使用される略語を含めて、そのロケールデータを取得します。Javaの8 Javaの独自のロケールデータまではデフォルトでした。JavaからUnicodeの共通ロケールデータリポジトリから8つのロケールデータ(CLDRは、下部にあるリンクを参照)あまりにも含まれており、Javaの9から、彼らはデフォルトです。Javaの独自のデータはまだ含まれており、指定してアクセスされているCOMPAT上記のシステムプロパティで。私たちは、ソースが順番に試されるなどの文字列で最初にそれを配置する必要があります。

一つは、別の(そしておそらくよりよい)ソリューションは、すべてのJavaのバージョンでCLDRを使用するだろうと期待しているかもしれません。不思議なことに、これはこの場合、すべてのJavaのバージョンで私たちと同じ形式を与えるものではありません。ここにプロパティを設定する出力があるCLDR,JRE(JREは、COMPATの古い名前であるJavaの8の上に私たちが代わりにこれを使用する必要があります)。

Javaの8の場合:

火曜、2019年7月16日夜02時35分02秒AEST

Javaの9および11の場合:

火、2019年7月16日夜02時35分52秒AEST

CLDRはバージョンで来て、同じバージョンが異なるJavaのバージョンに含まれていません。

java.time

ここで私は上記の出力のために使用されているスニペットです。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            "EEE, dd MMM yyyy HH:mm:ss zzz", Locale.forLanguageTag("en-AU"));
    ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Australia/Sydney"));
    System.out.println(now.format(formatter));

私は、現代のJavaの日付と時刻APIを使用してjava.timeを推薦しています。日時あなたが使用していること、クラス、SimpleDateFormatおよびは、Date私はそれらを避けることをお勧めしますので、長く時代遅れされており、常に悪い設計されていました。Javaの8日以降、我々はそれらを使用する必要がありますない理由は確かにありません、とjava.timeはあまりにもJavaの6と7にバックポートされました。

リンク

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=229788&siteId=1