Java 8 Time API( 四 )

对遗留日期时间的支持遗留日期/时间类几乎在所有应用程序中都使用,因此必须有向下兼容 。这就是为什么我们可以通过一些实用方法将遗留类转换为新类,反之亦然 。
//Date转InstantInstant timestamp = new Date().toInstant();//Instant转LocalDateTimeLocalDateTime date = LocalDateTime.ofInstant(timestamp,ZoneId.of(ZoneId.SHORT_IDS.get("CTT")));System.out.println("Date = " + date);//Calendar转InstantInstant time = Calendar.getInstance().toInstant();System.out.println(time);//TimeZone转ZoneIdZoneId defaultZone = TimeZone.getDefault().toZoneId();System.out.println(defaultZone);//ZonedDateTime from specific CalendarZonedDateTime gregorianCalendarDateTime = new GregorianCalendar().toZonedDateTime();System.out.println(gregorianCalendarDateTime);//Date API to Legacy classesDate dt = Date.from(Instant.now());System.out.println(dt);TimeZone tz = TimeZone.getTimeZone(defaultZone);System.out.println(tz);GregorianCalendar gc = GregorianCalendar.from(gregorianCalendarDateTime);System.out.println(gc);运行之后结果如下:
Date = 2022-10-26T16:47:38.3292022-10-26T08:47:38.429ZAsia/Shanghai2022-10-26T16:47:38.455+08:00[Asia/Shanghai]Wed Oct 26 16:47:38 CST 2022sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null]java.util.GregorianCalendar[time=1666774058455,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2022,MONTH=9,WEEK_OF_YEAR=43,WEEK_OF_MONTH=4,DAY_OF_MONTH=26,DAY_OF_YEAR=299,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=47,SECOND=38,MILLISECOND=455,ZONE_OFFSET=28800000,DST_OFFSET=0]可以看到,遗留的TimeZoneGregorianCalendartoString()方法过于冗长,对用户不友好 。

经验总结扩展阅读