jdk1.8——新的时间API

x33g5p2x  于2022-08-17 转载在 其他  
字(5.6k)|赞(0)|评价(0)|浏览(453)

jdk8在java.time包下新增了一批时间api,使用起来比老的Date更方便;

java.time包下的内容:


 

常用的LocalDate、LocalTime、LocalDateTime,其他基本都是辅助用,LocalDate只用于年月日,LocalTime只用于时分秒,LocalDateTime可用于年月日时分秒,这三个类的方法都比较相似;

可以通过now()方法获得系统当前时间:

  1. @Test
  2. public void test() {
  3. LocalDate ld = LocalDate.now();
  4. System.out.println(ld);
  5. LocalTime lt = LocalTime.now();
  6. System.out.println(lt);
  7. LocalDateTime ldt = LocalDateTime.now();
  8. System.out.println(ldt);
  9. ldt = LocalDateTime.now(Clock.systemDefaultZone());
  10. System.out.println(ldt);
  11. ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
  12. System.out.println(ldt);
  13. // ZoneId.getAvailableZoneIds().stream().forEach(System.out::println);//查看所有可用的时区
  14. }

也可以直接指定时间,或者自定义格式创建:

  1. @Test
  2. public void test() {
  3. System.out.println("[LocalDate]");
  4. LocalDate ld = LocalDate.of(2000, 6, 6);
  5. System.out.println(ld);
  6. ld = LocalDate.of(2000, Month.JUNE, 6);
  7. System.out.println(ld);
  8. ld = LocalDate.ofEpochDay(32L);//0是1970-1-1
  9. System.out.println(ld);
  10. ld = LocalDate.ofYearDay(1970, 32);
  11. System.out.println(ld);
  12. System.out.println("[LocalTime]");
  13. LocalTime lt = LocalTime.of(10, 20);
  14. System.out.println(lt);
  15. lt = LocalTime.of(10, 20, 30);
  16. System.out.println(lt);
  17. lt = LocalTime.of(10, 20, 30, 123456);
  18. System.out.println(lt);
  19. lt = LocalTime.ofNanoOfDay(60 * 1000000000L);
  20. System.out.println(lt);
  21. lt = LocalTime.ofSecondOfDay(60L);
  22. System.out.println(lt);
  23. System.out.println("[LocalDateTime]");
  24. LocalDateTime ldt = LocalDateTime.of(ld, lt);
  25. System.out.println(ldt);
  26. ldt = LocalDateTime.of(2022, 2, 22, 22, 22);
  27. System.out.println(ldt);
  28. ldt = LocalDateTime.of(2022, Month.FEBRUARY, 22, 22, 22);
  29. System.out.println(ldt);
  30. ldt = LocalDateTime.of(1999, 3, 4, 5, 6, 7);
  31. System.out.println(ldt);
  32. ldt = LocalDateTime.of(1999, Month.MARCH, 4, 5, 6, 7);
  33. System.out.println(ldt);
  34. ldt = LocalDateTime.of(2000, 1, 10, 20, 30, 40, 50);
  35. System.out.println(ldt);
  36. ldt = LocalDateTime.of(2000, Month.JANUARY, 10, 20, 30, 40, 50);
  37. System.out.println(ldt);
  38. ldt = LocalDateTime.ofEpochSecond(62, 70, ZoneOffset.ofHours(8));
  39. System.out.println(ldt);
  40. ldt = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());
  41. System.out.println(ldt);
  42. System.out.println("=========================");
  43. System.out.println(LocalDate.from(ldt));
  44. System.out.println(LocalTime.from(ldt));
  45. System.out.println(LocalDateTime.from(ldt));
  46. System.out.println(LocalDate.parse("1999-01-01"));//格式固定为 xxxx-xx-xx (DateTimeFormatter.ISO_LOCAL_DATE的格式)
  47. System.out.println(LocalTime.parse("12:34:56"));//格式为 xx:xx 或者 xx:xx:xx (DateTimeFormatter.ISO_LOCAL_TIME的格式)
  48. System.out.println(LocalDateTime.parse("1999-01-01T12:34"));//Date格式和Time格式中间用字母T连接(DateTimeFormatter.ISO_LOCAL_DATE_TIME的格式)
  49. System.out.println(LocalDate.parse("自定义2222年,02月,22日13:14:15:666666666", DateTimeFormatter.ofPattern("自定义yyyy年,MM月,dd日HH:mm:ss:SSSSSSSSS")));//只识别日期
  50. System.out.println(LocalTime.parse("自定义2222年,02月,22日13:14:15:666", DateTimeFormatter.ofPattern("自定义yyyy年,MM月,dd日HH:mm:ss:SSS")));//只识别时间
  51. System.out.println(LocalDateTime.parse("自定义2222年,02月,22日13:14:15:666666666", DateTimeFormatter.ofPattern("自定义yyyy年,MM月,dd日HH:mm:ss:SSSSSSSSS")));
  52. }

可对日期时间进行操作,3个类的方法基本类似,常用的方法:

  1. @Test
  2. public void test() {
  3. LocalDateTime ldt = LocalDateTime.of(1999, 1, 2, 3, 4, 5, 6);
  4. System.out.println(ldt);
  5. System.out.println(ldt.getYear());
  6. System.out.println(ldt.getHour());
  7. System.out.println(ldt.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH点mm分ss秒")));
  8. LocalDateTime newldt = ldt.withYear(2000).withHour(23).withSecond(59);
  9. System.out.println(ldt);
  10. System.out.println(newldt);
  11. System.out.println(ldt.isBefore(newldt));
  12. newldt = ldt.plusYears(0).plusMonths(13).plusDays(27).minusHours(2);
  13. System.out.println(newldt);
  14. newldt = ldt.plusYears(1).plusMonths(13).plusDays(27).minusHours(2);
  15. System.out.println(newldt);
  16. System.out.println(ldt.toLocalDate());
  17. }

Instant用于记录某一时刻,跟Date差不多,两者可以互转,功能比Date多:

  1. @Test
  2. public void test() {
  3. Instant instant = Instant.now();
  4. System.out.println(instant);
  5. Date d = Date.from(instant);
  6. System.out.println(d);
  7. System.out.println(d.toInstant());
  8. System.out.println(Instant.ofEpochMilli(60 * 60 * 1000L));
  9. System.out.println(Instant.parse("2000-11-11T01:02:03.456789Z"));//格式为 xxxx-xx-xxTxx:xx:xx.xxxZ
  10. Instant newInstant = instant.plusSeconds(3600L);
  11. System.out.println(newInstant);
  12. newInstant = instant.minusMillis(10 * 1000L);
  13. System.out.println(newInstant);
  14. System.out.println(instant.isBefore(newInstant));
  15. }

Duration可以用于计算时间间隔(时分秒),不能用于LocalDate,计算LocalDate之间的日期间隔需要使用Period:

  1. @Test
  2. public void test() {
  3. LocalDateTime ldt1 = LocalDateTime.of(2000, 1, 1, 1, 1, 1);
  4. LocalDateTime ldt2 = LocalDateTime.of(2000, 1, 2, 2, 1, 1);
  5. Duration duration = Duration.between(ldt1, ldt2);
  6. System.out.println(duration);
  7. LocalTime lt1 = LocalTime.of(1, 1);
  8. LocalTime lt2 = LocalTime.of(2, 2);
  9. Duration d = Duration.between(lt1, lt2);
  10. System.out.println(d);
  11. System.out.println(d.toMinutes());
  12. System.out.println(d.getSeconds());
  13. }

  1. @Test
  2. public void test() {
  3. LocalDate ld1 = LocalDate.of(1999, 1, 1);
  4. LocalDate ld2 = LocalDate.of(2001, 4, 6);
  5. Period p = Period.between(ld1, ld2);
  6. System.out.println(p);
  7. System.out.println(p.getYears());
  8. System.out.println(p.getMonths());
  9. System.out.println(p.getDays());
  10. System.out.println(p.toTotalMonths());
  11. }

还有一些其他的类:

  1. @Test
  2. public void test() {
  3. MonthDay md = MonthDay.now();
  4. System.out.println(md);
  5. Year y = Year.now();
  6. System.out.println(y);
  7. YearMonth ym = YearMonth.now();
  8. System.out.println(ym);
  9. ym = YearMonth.of(1, 2);
  10. System.out.println(ym);
  11. ZonedDateTime zdt = ZonedDateTime.now();
  12. System.out.println(zdt);
  13. ZoneOffset zo = ZoneOffset.of("+8");
  14. System.out.println(zo);
  15. zo = ZoneOffset.ofHoursMinutes(8, 30);
  16. System.out.println(zo);
  17. OffsetDateTime odt = OffsetDateTime.now();
  18. System.out.println(odt);
  19. OffsetTime ot = OffsetTime.now();
  20. System.out.println(ot);
  21. ot = OffsetTime.now(ZoneId.of("+9"));
  22. System.out.println(ot);
  23. }

相关文章