JDK8 之时间日期组件优化:【LocalDateTime,LocalDate,LocalTime,Peroid,Duration,DateTimeFormatter】

/**
 * java8之前:
 * Date:表示时间和日期,不支持时间日期运算,不支持国际化
 * Calendar:表示时间和日期,支持时间和日期操作,但是不支持格式化
 * SimpleDateFormatte:仅能格式化Date
 *
 * java8:兼容旧版Date
 * LocalDateTime:日期和时间
 * LocalDate:仅表示日期
 * LocalTime:仅表示时间
 * Peroid:仅表示日期间隔
 * Duration:时间间隔,以秒和纳秒为单位
 * DateTimeFormatter:可以格式化LocalDate,LocalTime以及LocalDateTime
 */

使用实例

// 获取当前时间
 System.out.println(LocalDateTime.now()); 
 // 结果:2019-12-19T20:28:50.358
 
 System.out.println(LocalDate.now()); 
 // 结果:2019-12-19
 
 System.out.println(LocalTime.now());
 // 结果:20:28:50.358
 
 System.out.println(LocalTime.now().toString());
 // 结果:20:28:50.358
 
 // 获取指定时间
 System.out.println(LocalDateTime.of(2019,12,18,10,2,1));
 // 结果:2019-12-18T10:02:01
 
 // 获取1天1小时之后的时间
 System.out.println(LocalDateTime.now().plusDays(1).plusHours(1));
 // 结果:2019-12-20T21:28:50.358
 
 // 获取1天1小时之之前的时间
 System.out.println(LocalDateTime.now().plusDays(-1).plusHours(-1));
 // 2019-12-18T19:28:50.358
 
 // 获取指定的年月日
 System.out.println(LocalDateTime.now().getYear());
 System.out.println(LocalDateTime.now().getMonthValue());
 System.out.println(LocalDateTime.now().getDayOfMonth());
 
 // 计算时间距离
 LocalDate localDate1 = LocalDate.of(2018,10,2);
 LocalDate localDate2 = LocalDate.of(2019,11,3);
 long num = localDate1.until(localDate2, ChronoUnit.DAYS);
 System.out.println("until:days:"+num);
 num = localDate1.until(localDate2, ChronoUnit.WEEKS);
 System.out.println("until:days:"+num);
 // TemporalAdjusters 实现:上一个,下一个时间点
 System.out.println(LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
 System.out.println(LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)));
 System.out.println(LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.MONDAY)));
 // 月最后一天
 System.out.println(LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()));
 // 月最后一个周一
 System.out.println(LocalDate.now().with(TemporalAdjusters.lastInMonth(DayOfWeek.MONDAY)));
 // 月第一天
 System.out.println(LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth()));
 System.out.println(LocalDate.now().with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.MONDAY)));

 // 时间格式化 DateTimeFormatter
 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
 // date -> string
 System.out.println(dateTimeFormatter.format(LocalDateTime.now()));
 // string -> date
 System.out.println(dateTimeFormatter.parse("20190212111111"));
 System.out.println(LocalDateTime.parse("20190212111111", dateTimeFormatter));

 // 时区 Instant
 // UTC时区(格林尼治时间)
 // 获取UTC时间   比北京时间晚8小时
 Instant instant = Instant.now();
 System.out.println(instant);
 // 获取北京时间(东8区)
 OffsetDateTime offsetDateTime = Instant.now().atOffset(ZoneOffset.ofHours(8));
 System.out.println("offsetDateTime:"+offsetDateTime);
 // 获取时间戳
 System.out.println("时间戳:"+Instant.now().toEpochMilli());
 // 时间戳操作
 System.out.println("时间戳:"+Instant.ofEpochSecond(18).plusMillis(1).toEpochMilli());

 // LocalDateTime 与时间戳转换
 // 时间戳 -》 LocalDateTime (默认改时间戳为格林尼治时间)
 long timestamp_1 = System.currentTimeMillis();
 LocalDateTime localDateTime = Instant.ofEpochMilli(timestamp_1).atOffset(ZoneOffset.ofHours(0)).toLocalDateTime();
 long timestamp = LocalDateTime.now().toInstant(ZoneOffset.ofHours(0)).toEpochMilli();
 System.out.println("时间戳:timestamp_1="+timestamp_1);
 System.out.println("时间戳:localDateTime="+localDateTime);
 System.out.println("时间戳:timestamp="+timestamp);

 // 兼容旧版本Date
 LocalDateTime ldt = LocalDateTime.of(2019,12,18,10,2,1);
 Date date = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
 // date -> LocalDateTime
 LocalDateTime dt = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();


猜你喜欢

转载自www.cnblogs.com/outpointexception/p/12071380.html