将纪元时间转换为日期

我尝试了一百万种不同的方式,但无济于事。 任何帮助将非常感激。

long millis = getMillisFromServer(); Date date = new Date(millis); DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); format.setTimeZone(TimeZone.getTimeZone("Australia/Sydney")); String formatted = format.format(date); 

以上不起作用。

基本上,我想要做的是,获取纪元时间并将其转换为澳大利亚时间。 我当地时间是+05.30但当然我不希望这是导致这种转换的因素。

编辑-

运行您的确切代码时的输出,

epoch 1318388699000

周五10月12日08:34:59 GMT + 05:30 2011

12/10/2011 03:04:59

12/10/2011 14:04:59

编辑:好的,所以你不希望你当地的时间(不是澳大利亚)为结果做出贡献,而是要求澳大利亚时区。 你现有的代码应该绝对没问题,虽然悉尼目前是UTC + 11 ,而不是UTC + 10.简短而完整的测试应用程序:

 import java.util.*; import java.text.*; public class Test { public static void main(String[] args) throws InterruptedException { Date date = new Date(1318386508000L); DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); format.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); String formatted = format.format(date); System.out.println(formatted); format.setTimeZone(TimeZone.getTimeZone("Australia/Sydney")); formatted = format.format(date); System.out.println(formatted); } } 

输出:

 12/10/2011 02:28:28 12/10/2011 13:28:28 

我还建议你开始使用Joda Time ,它只是一个更好的日期/时间API …

编辑:请注意,如果您的系统不知道Australia/Sydney时区,它将显示UTC。 例如,如果我更改要使用TimeZone.getTimeZone("blah/blah") ,它将显示两次UTC值。 我建议你打印TimeZone.getTimeZone("Australia/Sydney").getDisplayName() ,看看它说的是什么……并检查你的代码是否也有拼写错误:)

请注意纪元时间是秒,Date对象接受Long值,以毫秒为单位。 因此,您必须将纪元值乘以1000才能将其用作长值。 如下: –

 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss"); sdf.setTimeZone(TimeZone.getTimeZone(timeZone)); Long dateLong=Long.parseLong(sdf.format(epoch*1000)); 

这是现代答案(从2014年开始有效)。 接受的答案在2011年是一个非常好的答案。这些天我建议没有人使用DateDateFormatSimpleDateFormat类。 现代Java日期和时间API都更加自然。

要从millis获取日期时间对象:

  ZonedDateTime dateTime = Instant.ofEpochMilli(millis) .atZone(ZoneId.of("Australia/Sydney")); 

如果millis等于1318388699000L ,这将给你2011-10-12T14:04:59+11:00[Australia/Sydney] 。 如果代码以某种奇怪的方式结束在不知道澳大利亚/悉尼时区的JVM上,您可以确保通过exception得到通知。

如果您希望以字符串格式显示日期时间以进行演示:

 String formatted = dateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")); 

结果:

 12/10/2011 14:04:59 

PS我不知道你的意思是“以上不起作用。”在我的电脑上你的问题代码也打印12/10/2011 14:04:59