将Unix时间戳转换为日期

时间:2018-09-27 19:28:18

标签: java date datetime java-8

我有多头值 1282680754000 ,如果我在https://www.epochconverter.com/中检查此值,则会得到 2010年8月24日,星期二,下午8:12:34 < / p>

但是,如果我使用新的 DateTime(1282680754000).toDate(),则会得到 2010年8月25日星期三IST 2010 (这将增加+5.30小时)

如何在Java中获取 1282680754000 2010年8月24日,星期二8:12:34

3 个答案:

答案 0 :(得分:1)

只需使用

Instant.ofEpochMilli(1_282_680_754_000L)

Instant.ofEpochMilli(1_282_680_754_000L).atOffset(ZoneOffset.UTC)

(使用现代Java日期和时间API java.time;您可以将其视为Joda-Time的后继者。)

后者会给您OffsetDateTime,然后您可以将其格式化为所需的格式。

您的代码出了什么问题?

您的代码正确。您得到了正确的Date。唯一的事情是:

  • 在大多数情况下,您不希望使用java.util.Date。该类早已过时且存在设计问题,这是Joda-Time和后来的java.time开发的主要背景。
  • 您的Date是在您希望UTC的本地时间(IST,可能是印度标准时间或亚洲/加尔各答)打印的。 Date既没有时区也没有偏移。打印时,其toString方法将获取JVM的时区设置,并以该时区呈现时间(在IST中就是这种情况)。这种行为使许多人感到惊讶。

链接: All about java.util.Date,位于Jon Skeet的编码博客上

答案 1 :(得分:0)

 String result = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy h:mm:ss a")
            .withZone(ZoneId.of("UTC"))
            .toFormat()
            .format(Instant.ofEpochMilli(1282680754000L));

 System.out.println(result); // Tuesday, August 24, 2010 8:12:34 PM

答案 2 :(得分:0)

省略toDate,您将其转换为Date对象,其toString方法使用操作系统默认时区打印其值(您可以在您的问题)。

仅供参考,请检查以下内容:

public static void main(String[] args) {
  DateTime dateTime = new DateTime(1282680754000L, DateTimeZone.forID("GMT"));
  System.out.println(dateTime.toDate().toGMTString());
}
  

2010年8月24日格林尼治标准时间20:12:34

反对(我的默认时区是IDT):

public static void main(String[] args) {
  DateTime dateTime = new DateTime(1282680754000L,DateTimeZone.forID("GMT"));
  System.out.println(dateTime.toDate());
}
  

2010年IDT星期二8月24日23:12:34