我需要将unix时间戳转换为日期对象。 我试了一下:

java.util.Date time = new java.util.Date(timeStamp);

时间戳值:1280512800

日期应该是“2010/07/30 - 22:30:00”(因为我通过PHP得到它),但我得到的是Thu 1月15日23:11:56 IRST 1970。

应该怎么做呢?


当前回答

对于1280512800,乘以1000,因为java期望的是毫秒:

java.util.Date time=new java.util.Date((long)timeStamp*1000);

如果你已经有了毫秒,那么只需新建java.util.Date((long)timeStamp);

从文档中可以看到:

分配一个Date对象和 对象初始化它以表示 指定的毫秒数 标准基准时间称为“时” epoch”,即1970年1月1日, 就是格林尼治时间。

其他回答

Date d = new Date(i * 1000 + TimeZone.getDefault().getRawOffset());

如果在不同的机器上转换时间戳值,还应该检查该机器的时区。例如;

如果您使用EST或UTC时区运行,上述描述将产生不同的Date值。

设置时区;也就是UTC, 你可以简单地重写;

    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    java.util.Date time= new java.util.Date((Long.parseLong(timestamp)*1000));

java.time

Java 8引入了一个用于处理日期和时间的新API: Java。包的时间。

与java。在UTC, 1970-01-01 t0: 00z,您可以解析自1970年第一个时刻的epoch引用以来的整个秒数。结果是一个即时。

Instant instant = Instant.ofEpochSecond( timeStamp );

如果您需要一个java.util. date来与尚未为java更新的旧代码进行互操作。时间,转换。调用添加到旧类中的新转换方法。

Date date = Date.from( instant );

kotlin的

fun unixToDate(timeStamp: Long) : String? {
    val time = java.util.Date(timeStamp as Long * 1000)
    val sdf = SimpleDateFormat("yyyy-MM-dd")
    return sdf.format(time)

}

对于1280512800,乘以1000,因为java期望的是毫秒:

java.util.Date time=new java.util.Date((long)timeStamp*1000);

如果你已经有了毫秒,那么只需新建java.util.Date((long)timeStamp);

从文档中可以看到:

分配一个Date对象和 对象初始化它以表示 指定的毫秒数 标准基准时间称为“时” epoch”,即1970年1月1日, 就是格林尼治时间。