为什么程序用不同的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发布于 2012-11-22 16:06:56
你的代码没有问题,只是调试输出是错误的(误导性的)。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...
https://stackoverflow.com/questions/13508226
复制相似问题