Java8新特性 - 新的日期时间 API
是什么?
Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。
怎么使用?
- 日期
1 public class LocalDateDemo { 2 public static void main(String[] args) { 3 /** 日期 **/ 4 LocalDate date = LocalDate.now(); 5 System.out.println("LocalDate:" + date); 6 7 // 获取 年,月,日 8 int year = date.getYear(); 9 int month = date.getMonthValue(); 10 int day = date.getDayOfMonth(); 11 System.out.println("获取 年,月,日:" + year + "年" + month + "月" + day + "日"); 12 13 // 设置日期 年月日 14 LocalDate date2 = LocalDate.of(year, month, day); 15 System.out.println("LocalDate:" + date2); 16 17 // 字符串解析 18 LocalDate date3 = LocalDate.parse("2020-10-24"); 19 System.out.println("字符串解析:" + date3); 20 } 21 }
- 时辰
1 public class LocalTimeDemo { 2 public static void main(String[] args) { 3 /** 时辰 **/ 4 LocalTime time = LocalTime.now(); 5 System.out.println("LocalTime:" + time); 6 7 // 获取 时,分,秒,纳秒 8 int hour = time.getHour(); 9 int minute = time.getMinute(); 10 int second = time.getSecond(); 11 int nano = time.getNano(); 12 System.out.println("获取 时,分,秒,纳秒:" + hour + "时" + minute + "分" + second + "秒" + nano + "纳秒"); 13 14 // 设置时辰 时,分,秒,纳秒 15 LocalTime time2 = LocalTime.of(hour, minute, second, nano); 16 System.out.println("LocalTime:" + time2); 17 18 // 字符串解析 19 LocalTime date3 = LocalTime.parse("11:11:11.111000000"); 20 System.out.println("字符串解析:" + date3); 21 } 22 }
- 时间
1 public class LocalDateTimeDemo { 2 public static void main(String[] args) { 3 /** 时间 **/ 4 LocalDateTime dateTime = LocalDateTime.now(); 5 System.out.println("LocalDateTime:" + dateTime); 6 7 // LocalDateTime实际上就是 日期类+时间类的组合,所以也可以LocalDate和LocalTime的一些方法 8 int year = dateTime.getYear(); 9 int month = dateTime.getMonthValue(); 10 int day = dateTime.getDayOfMonth(); 11 int hour = dateTime.getHour(); 12 int minute = dateTime.getMinute(); 13 int second = dateTime.getSecond(); 14 int nano = dateTime.getNano(); 15 16 // 设置时间 方案一 17 LocalDateTime dateTime2 = dateTime.withDayOfMonth(day).withYear(year); 18 System.out.println("设置时间 方案一:" + dateTime2); 19 20 // 设置时间 方案二 21 LocalDate date = LocalDate.now(); 22 LocalTime time = LocalTime.now(); 23 LocalDateTime dateTime3 = LocalDateTime.of(date, time); 24 System.out.println("设置时间 方案二" + dateTime3); 25 26 // 设置时间 方案三 27 LocalDateTime dateTime4 = LocalDateTime.of(year, month, day, hour, minute, second, nano); 28 System.out.println("设置时间 方案三" + dateTime4); 29 30 /** 时间转换 **/ 31 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); 32 LocalDateTime dateTime5 = LocalDateTime.parse("2020-10-19 19:19", formatter); 33 System.out.println("字符串转时间:" + dateTime5); 34 35 // 从LocalDateTime转字符串 36 String dateTimeStr = dateTime5.format(formatter); 37 System.out.println("时间转字符串:" + dateTimeStr); 38 } 39 }
- 有意思的发现
1 public class LocalDateTimeDemo2 { 2 public static void main(String[] args) { 3 // 首次创建实例,会占用比较长的时间,再次创建时就会很快 4 Long startTime = System.currentTimeMillis(); 5 LocalDateTime dateTime3 = LocalDateTime.now(); 6 Long endTime = System.currentTimeMillis(); 7 System.out.println("首次创建实例,消耗时长:" + (endTime - startTime) + " mm"); 8 9 startTime = System.currentTimeMillis(); 10 LocalDateTime dateTime4 = LocalDateTime.now(); 11 endTime = System.currentTimeMillis(); 12 System.out.println("再次创建实例,消耗时长:" + (endTime - startTime) + " mm"); 13 } 14 }
预计结果
1 首次初始化,消耗时长:77 mm 2 再次初始化,消耗时长:0 mm
有什么好处?
设计更合理,线程安全的,有专门的时区处理。

浙公网安备 33010602011771号