Calendar.getInstance(TimeZone.getTimeZone(“UTC”)) 不返回 UTC 时间

2022-08-31 08:54:51

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

这是我使用的代码

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

我得到的回应是:

Sat Jan 25 15:44:18 IST 2014

所以我尝试将默认时区更改为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

我在这里错过了什么吗?


答案 1

调用从 返回 。它是转换为 的字符串,并且该转换将使用默认时区。System.out.println(cal_Two.getTime())DategetTime()DateprintlnIST

您需要显式使用 以在所需的时区打印 。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());

答案 2

java.util.Date独立于时区。当您打印实例的时区设置为 时,将返回一个没有时区(并且始终位于默认时区)的实例cal_TwoCalendarUTCcal_Two.getTime()Date

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

输出:

 Sat Jan 25 16:40:28 IST 2014
    sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 

从 javadoc 的TimeZone.setDefault()

设置由 getDefault 方法返回的时区。如果区域为 null,请将默认值重置为 VM 首次启动时的原始值。

因此,移动您的前置是实例化的,您将获得正确的结果。setDefault()cal_Two

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

Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());

输出:

Sat Jan 25 11:15:29 UTC 2014
Sat Jan 25 11:15:29 UTC 2014

推荐