我对Calendar.getInstance(TimeZone.getTimeZone("UTC"))方法调用得到的结果感到非常困惑,它正在返回IST时间。

这是我使用的代码

Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());

我得到的答复是:
Sat Jan 25 15:44:18 IST 2014

所以我尝试将默认的TimeZone更改为UTC,然后检查了一下,然后工作正常
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());

TimeZone tz  = TimeZone.getDefault() ;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
TimeZone.setDefault(tz);

结果:
Sat Jan 25 16:09:11 IST 2014
Sat Jan 25 10:39:11 UTC 2014

我在这里想念什么吗?

最佳答案

System.out.println(cal_Two.getTime())调用从Date返回一个getTime()。这是Date,它将被转换为println的字符串,并且在您的情况下,该转换将使用默认的IST时区。

您需要显式使用DateFormat.setTimeZone()在所需的时区中打印Date

编辑:@Laurynas的礼貌,请考虑以下事项:

TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
       new SimpleDateFormat("EE MMM dd HH:mm:ss zzz yyyy", Locale.US);
simpleDateFormat.setTimeZone(timeZone);

System.out.println("Time zone: " + timeZone.getID());
System.out.println("default time zone: " + TimeZone.getDefault().getID());
System.out.println();

System.out.println("UTC:     " + simpleDateFormat.format(calendar.getTime()));
System.out.println("Default: " + calendar.getTime());

07-28 02:39
查看更多