実行時に 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 で以下のコメントが表示されますが、その多くを理解できません。
* calls: cal.setTimeZone(EST); cal.set(HOUR, 1); cal.setTimeZone(PST).
* Is cal set to 1 o'clock EST or 1 o'clock PST? Answer: PST. More
* generally, a call to setTimeZone() affects calls to set() BEFORE AND
* AFTER it up to the next call to complete().
手伝っていただけませんか?
考えられる解決策の 1 つ:
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);
この解決策は大丈夫ですか?