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

Jim*_*Jim 2 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());    
Run Code Online (Sandbox Code Playgroud)

第2行显示当前时间.
第1行显示适当时区的时间.

Rea*_*tic 5

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

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

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