1

为什么程序以不同的方式打印出相同的输出/时间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
4

1 回答 1

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

于 2012-11-22T08:06:56.380 回答