具有不同TImeZone的SameTime

时间:2012-11-22 08:05:32

标签: java

为什么程序使用不同的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

1 个答案:

答案 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日期/时间处理的问题一样,请考虑 ...