将纪元时间转换为日期

我已经尝试了上百万种不同的方法,但都无济于事.任何帮助将非常感激.

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,但我当然不希望这成为促成这种转换的因素.

编辑-

当我运行你的确切代码时输出,

纪元 1318388699000

2011 年 10 月 12 日星期三 08:34:59 GMT+05:30

2011 年 12 月 10 日 03:04:59

12/10/2011 14:04:59

xieri2009 回答:将纪元时间转换为日期

好的,所以您不希望您的 本地 时间(不是澳大利亚)对结果做出贡献,而是澳大利亚时区.那么您现有的代码应该绝对没问题,尽管 悉尼目前是 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() 并查看它的内容...并检查您的代码是否有错别字:)

这篇关于将纪元时间转换为日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3175523.html

大家都在问