为什么Joda和Calendar会打印不同的时间?

时间:2015-12-01 19:47:07

标签: java calendar jodatime

为什么这两个调试行会打印不同的小时数?

TimeZone tz = TimeZone.getTimeZone("GMT-5");    
Calendar cal = Calendar.getInstance(tz);    
DateTime dt = new DateTime(cal);    
System.out.println("1 ====> " + dt.toString());  
System.out.println("2 ====> " + cal.getTime());    

第二行显示当前时间 第1行显示适当时区的时间。

1 个答案:

答案 0 :(得分:5)

getTime()中的方法Calendar会返回Date个对象。 Date对象没有时区。它仅表示自1970年1月1日午夜以来UTC时区的时间(以毫秒为单位)。打印时,它使用默认时区,除非您使用通过时区设置的DateFormat

Joda-Time' s DateTime是一个包含时区的对象。从Calendar对象创建时,它会占用该日历的时区。

因此,当您从Date创建Calendar时,您将丢失时区信息。当您从DateTime创建Calendar时,您可以保留时区信息。