3

以下のコード:

import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class FooMain {
    private static final DateFormat DF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");

    public static void main(String args[]) {
        System.out.println(DF.format(new Date(0)));
    }
}

プリントアウト:

1970-01-01T01:00Z

代わりにすべきではなかったの1970-01-01T00:00Zですか?Unix エポック時間は常に明確であり、タイムゾーンについて心配する必要がないことは理解していますが、重要な場合に備えて私のタイムゾーンを次に示します。

$ cat /etc/timezone 
Europe/Madrid    
4

3 に答える 3

1

java.time

従来の日時 API (java.util日時型とその書式設定型SimpleDateFormatなど) は時代遅れであり、エラーが発生しやすくなっています。java.time使用を完全にやめて、最新の日時 API *に切り替えることをお勧めします。

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

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        // Recommended
        Instant epoch = Instant.EPOCH;
        System.out.println(epoch);

        // Alternatively,
        epoch = Instant.ofEpochMilli(0);
        System.out.println(epoch);
    }
}

出力:

1970-01-01T00:00:00Z
1970-01-01T00:00:00Z

最新の日時 API *の詳細についてjava.timeは、Trail: Date Timeを参照してください。


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

于 2021-05-22T09:13:43.880 に答える