Java日历:获取特定时区的时间

3
以下代码可以显示格林威治标准时间(UTC时间):
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
System.out.println(new Date());

但是这个并没有显示本地时间。
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    System.out.println(cal.getTime());
    System.out.println(new Date());

我有一些简单的问题,可能是我自己忽略了什么吗?


java.util的日期时间API及其格式化API SimpleDateFormat已经过时且容易出错。建议完全停止使用它们并切换到现代日期时间API。请查看此答案,其中使用了现代日期时间API。 - Arvind Kumar Avinash
2个回答

6
您正在打印 Date.toString() 的结果,它总是使用默认时区。
我建议您使用DateFormat,因为它更适合格式化日期。 Date.toString 实际上仅适用于调试 - 它对格式没有任何控制。
或者,对于所有日期和时间操作,请使用 Joda Time - 这是一个更好的 API 开始 :)

1
我只是好奇,谁会是第一个提供Joda Time的人? - Andrei Petrenko

3

要获取其他时区格式化后的日期,请使用SimpleDateFormat,并在其中设置时区(默认情况下,它使用本地时区)。

可以尝试以下方法:

SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy HH:mm:SS Z");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
Calendar cal = Calendar.getInstance();
System.out.println(f.format(cal.getTime()));
System.out.println(new Date());

我需要将这个字符串日期转换为Date日期,但如果我这样做,它会再次选择本地时区。有什么解决办法吗? - Parkash Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接