5

エポックタイムスタンプを日付と時刻に変換する必要があります。次のコードを使用して変換しましたが、間違った日付、年、時刻に変換されます。

String date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
                    .format(new java.util.Date (1319286637/1000));

期待される出力は、ある時点で今日の日付でしたが、私が得た結果は次のとおりです。

1970年1月1日05:51:59

4

2 に答える 2

11

Date(long)コンストラクターにはミリ秒かかります。エポックタイムを除算するのではなく、1000を掛ける必要があります。

于 2011-10-22T07:10:59.523 に答える
3

簡単に言えば:

Instant.ofEpochSecond( 1_319_286_637L )

2011-10-22T12:30:37Z

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

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.ofEpochSecond(1319286637L);
        System.out.println(instant);
    }
}

出力:

2011-10-22T12:30:37Z

Instantは、タイムライン上の瞬間的なポイントを表します。Z出力のは、ゼロタイムゾーンオフセットのタイムゾーン指定子です。Zuluの略で、Etc/UTCタイムゾーン(+00:00時間帯のオフセットがあります)を指定します。

Instantを他の日時タイプに変換できます。

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.ofEpochSecond(1319286637);
        ZonedDateTime zdt = instant.atZone(ZoneId.of("Asia/Kolkata"));
        System.out.println(zdt);

        // A custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/uuuu HH:mm:ss", Locale.ENGLISH);
        System.out.println(dtf.format(zdt));
    }
}

出力:

2011-10-22T18:00:37+05:30[Asia/Kolkata]
10/22/2011 18:00:37

最新の日時API *の詳細についてjava.timeは、Trail:DateTimeをご覧ください。

注:java.util日時APIとそのフォーマットAPIはSimpleDateFormat古く、エラーが発生しやすくなっています。それらの使用を完全に停止し、最新の日時API *に切り替えることをお勧めします。ただし、目的を問わず、このオブジェクトをInstantのオブジェクトに変換する必要がある場合はjava.util.Date、次のように変換できます。

Date date = Date.from(instant);

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

于 2021-05-28T21:31:33.520 に答える