如何为java.util.Calendar/Date更改时区
如何为java.util.Calendar/Date更改时区
我想在运行时更改Java Calendar实例中的TIMEZONE值。
我尝试了以下方法。但两个实例的输出都是相同的:
Calendar cSchedStartCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); System.out.println(cSchedStartCal.getTime().getTime()); cSchedStartCal.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); System.out.println(cSchedStartCal.getTime().getTime());
输出:
1353402486773
1353402486773
我也尝试了这个方法,但输出仍然相同:
Calendar cSchedStartCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); System.out.println(cSchedStartCal.getTime()); Calendar cSchedStartCal1 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Calcutta")); cSchedStartCal1.setTime(cSchedStartCal.getTime()); System.out.println(cSchedStartCal.getTime());
在API中,我看到了以下注释,但我无法理解其中的大部分内容:
* 调用:cal.setTimeZone(EST); cal.set(HOUR, 1); cal.setTimeZone(PST)。 * cal设置为1点的EST还是PST?答案:PST。更一般地说,对setTimeZone()的调用会影响它之前和之后的set()调用,直到下一次complete()被调用。
你能帮我解决吗?
一种可能的解决方案:
Calendar cSchedStartCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); long gmtTime = cSchedStartCal.getTime().getTime(); long timezoneAlteredTime = gmtTime + TimeZone.getTimeZone("Asia/Calcutta").getRawOffset(); Calendar cSchedStartCal1 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Calcutta")); cSchedStartCal1.setTimeInMillis(timezoneAlteredTime);
这个解决方案可以吗?