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

 

有什么好处?

  设计更合理,线程安全的,有专门的时区处理。

 

posted @ 2019-11-07 16:38  WinterAndRain  阅读(447)  评论(0)    收藏  举报