如何为java.util.Calendar/Date更改时区

15 浏览
0 Comments

如何为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);

这个解决方案可以吗?

0