为什么程序使用不同的TimeZone
输出相同的输出/时间?
Calendar cal = GregorianCalendar.getInstance();
TimeZone timeZone_1 = TimeZone.getTimeZone("Asia/Rangoon");
cal.setTimeZone(timeZone_1);
System.out.println(cal.getTime());
TimeZone timeZone_2 = TimeZone.getTimeZone("Asia/Tokyo");
cal.setTimeZone(timeZone_2);
System.out.println(cal.getTime());
示例输出:
Thu Nov 22 09:00:33 MMT 2012
Thu Nov 22 09:00:33 MMT 2012
我的预期输出是:
Thu Nov 22 09:00:33 MMT 2012
Thu Nov 22 11:30:33 MMT 2012
答案 0 :(得分:3)
您的代码很好,只有调试输出错误(误导)。 cal.getTime()
返回Date
个对象,该对象独立于时区。但Date.toString()
始终使用系统的时区打印此日期。 Date.toString()
是非常违反直觉的(它显示日历时间与系统时区,但几乎没有存储毫秒数)应该被禁止/弃用。
要准确记录,请使用SimpleDateFormat
或调用各种Calendar.get*()
方法:
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
System.out.println(cal.get(Calendar.MINUTE));
与任何有关Java日期/时间处理的问题一样,请考虑jodatime ...