我有多头值 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
答案 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