我已经尝试过一百万种不同的方法,但是没有用。任何帮助将非常感激。
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
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()并查看其内容…并检查您的代码是否有错别字:)
Australia/Sydney
TimeZone.getTimeZone("blah/blah")
TimeZone.getTimeZone("Australia/Sydney").getDisplayName()