Java8 新特性

日期处理

在Java8之前,操作日期的话不是很方便,有些地方需要自己编写实现。在Java8中的java.time包下新增很多关于日期处理的类,通过这些类可以使开发者更便捷的操作日期,这些类都是final修饰的,并且是线程安全的。

java8新增的关于日期处理的包:

    • java.time
      主要的日期处理相关的类都在这个包下
    • java.time.chrono
      这个包中的类主要是对应不同国家的日历记录的方式,国际上通用的日历是2018-01-01这种,但是有些国家有自己独特的记录日历的方式,比如我们国家的农历,不过可惜的是在这个包下没有农历相关的类。
    • java.time.format
      日期格式化相关的类在这个包下
    • java.time.temporal
      该包下存放着不同国家记录时间的方式相关的类
    • java.time.zone
      这个包下存放着设置时区相关的类,目前我们国家是在东八区。

 

LocalDate:只能处理日期相关的数据,不包含时间

 1     public static void main(String[] args) {
 2         //获取当前日期
 3         LocalDate date1 = LocalDate.now();
 4         System.out.println(date1);
 5         
 6         int year = date1.getYear();
 7         int month = date1.getMonthValue();
 8         int day = date1.getDayOfMonth();
 9         
10         //日期格式化
11         String date2 = date1.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));
12         System.out.println(date2);
13         
14         //是否是闰年
15         boolean leap = date1.isLeapYear();
16         
17         //判断当前月份的天数
18         int len = date1.lengthOfMonth();
19         
20         //自定义日期方式一
21         LocalDate date3 = LocalDate.parse("2017-07-11");
22         //自定义日期方式二
23         LocalDate date4 = LocalDate.of(2017, 7, 11);
24         
25         //判断日期是否相等
26         if(date3.equals(date4)){
27             System.out.println("日期相等");
28         }
29         
30         //获取一周后的日期
31         LocalDate date5 = date1.plus(1, ChronoUnit.WEEKS);
32         System.out.println("一周后的日期:" + date5);
33     }

 

* LocalTime:只能处理时间,不包括日期

 1     public static void main(String[] args) {
 2         //获取当前时间
 3         LocalTime time1 = LocalTime.now();
 4         //获取当前时间,不包含毫秒
 5         LocalTime time2 = LocalTime.now().withNano(0);
 6         System.out.println(time1);
 7         System.out.println(time2);
 8         
 9         //一小时后
10         LocalTime time3 = time1.plusHours(1);
11         System.out.println(time3);
12         
13         //自定义时间
14         LocalTime time4 = LocalTime.parse("06:12:30");
15         LocalTime time5 = LocalTime.of(6, 30, 12);
16         
17     }

 

* LocalDateTime:可以处理日期和时间

1     public static void main(String[] args) {
2         LocalDateTime date1 = LocalDateTime.now();
3         System.out.println(date1);
4         
5         LocalDateTime date2 = LocalDateTime.of(2017, 7, 20, 13, 20, 15);
6     }

 

* Duration和period

 1     public static void main(String[] args) {
 2         LocalDate date1 = LocalDate.of(2017, 7, 11);
 3         LocalDate date2 = LocalDate.of(2017, 7, 13);
 4         //Period处理LocalDate
 5         Period period = Period.between(date1, date2);
 6         System.out.println(period.getDays());
 7         
 8         
 9         LocalTime time1 = LocalTime.of(18, 20, 10);
10         LocalTime time2 = LocalTime.of(18, 30, 10);
11         
12         Duration duration = Duration.between(time1, time2);
13         System.out.println(duration.getSeconds());
14     }

 

设定时区

通过ZoneId这个类中的of方法可以设定时区:

1     //获取本地的时区时间
2     ZonedDateTime now = ZonedDateTime.now();
3     System.out.println(now);
4 
5     //设定时区为美国洛杉矶
6     ZoneId zone = ZoneId.of("America/Los_Angeles");
7     //获取指定的时区时间
8     ZonedDateTime usa = ZonedDateTime.now(zone);
9     System.out.println(usa);

 

函数式接口

jdk8中新增了函数式接口,在一个接口中只有一个抽象方法的接口被称为函数式接口,例如java.lang.Runnable,java.util.concurrent.Callable。jdk8中新增了@FunctionalInterface注解来标注一个函数式接口。

default方法

jdk8中新增了default方法,jdk8之前接口中的方法必须都是抽象的,在jdk8中允许接口中定义非抽象方法,在接口中的非抽象方法上使用default修饰即可,比如在jdk8中新增了一个函数式接口:java.util.function。java8中打破了接口中的方法必须都是抽象的这一规范,有一个好处就是可以提高程序的兼容性,在java.lang.Iterable接口中新增了forEach方法,该方法就是使用def

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值