JDK8新特性之日期时间

​ JDK8之前我们处理日期时间,通常会使用SimpleDateFormat,Calendar等工具类,本节我将给大家讲讲JDK8新增的日期时间处理方式。其实就是新的一套处理日期时间API,我们主要学习一下java.time包下的API,它是一个比较核心的API,提供了一系列处理方式,比如日期时间格式化,时间比较,时间加减等等方便我们日常开发的新方式。那么,传统的java.util.Date也可以用来做日期时间操作,JDK8为什么还要提供新的处理方式。其实java.util.Date是非线程安全的,而且API设计不够友好,不便于开发者。

​ 接下来我们将一起来过一遍JDK8对于日期时间处理的API实战。我们来学第一个日期处理类LocalDate。

我们找到这个类的源代码,首先可以先找到构造方法,从构造方法入手。

在这里插入图片描述

我们可以看到这个类只有一个构造方法,而且是私有的,所以我们没法用new去实例化出来。

那么是如何得到实例对象。

在这里插入图片描述

我们可以查找到返回LocalDate实例的静态方法,这个类提供了大量的静态方法来获取日期或者操作日期,我们就是使用这些API来做实战。

1、打印当前日期

/**
 * @author 小吉
 * @description jdk8新特性之日期处理
 * @date 2020/5/22
 */
public class Demo {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println("现在日期:" + date);//现在日期:2020-05-22
    }
}

2、获取常用的年月日周

/**
 * @author 小吉
 * @description jdk8新特性之日期处理
 * @date 2020/5/22
 */
public class Demo {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println("年份:" + date.getYear());//年份:2020
        System.out.println("月份:" + date.getMonth());//月份:MAY
        System.out.println("月份(数字):" + date.getMonthValue());//月份(数字):5
        System.out.println("日:" + date.getDayOfMonth());//日:22
        System.out.println("周:" + date.getDayOfWeek());//周:FRIDAY
    }
}

3、日期加减

/**
 * @author 小吉
 * @description jdk8新特性之日期处理
 * @date 2020/5/22
 */
public class Demo {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println("当前日期:" + date);//当前日期:2020-05-22
        System.out.println("减一天后的日期:" + date.plusDays(-1));//减一天后的日期:2020-05-21
        System.out.println("加一天后的日期:" + date.plusDays(1));//加一天后的日期:2020-05-23
        System.out.println("减两个月后的日期:" + date.plusMonths(-2));//减两个月后的日期:2020-03-22
        System.out.println("加两个月后的日期:" + date.plusMonths(2));//加两个月后的日期:2020-07-22
        System.out.println("减三年后的日期:" + date.plusYears(-3));//减三年后的日期:2017-05-22
        System.out.println("加三年后的日期:" + date.plusYears(3));//加三年后的日期:2023-05-22
        System.out.println("一周前的日期:" + date.plusWeeks(-1));//一周前的日期:2020-05-15
        System.out.println("一周后的日期:" + date.plusWeeks(1));//一周后的日期:2020-05-29
    }
}

4、日期比较

/**
 * @author 小吉
 * @description jdk8新特性之日期处理
 * @date 2020/5/22
 */
public class Demo {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        LocalDate plusDate = date.plusDays(10);
        System.out.println("当前日期:" + date);//当前日期:2020-05-22
        System.out.println("十天后的日期:" + plusDate);//十天后的日期:2020-06-01
        System.out.println("plusDate在date之后:" + plusDate.isAfter(date));//plusDate在date之后:true
    }
}

关于LocalDate类的API还有很多,这里我就不一一去编写,相信大家只要通过查看源码就可以找到相应的方法去使用。那么在这里我比较推荐举一反三,触类旁通的这种学习方式,比如学习LocalDate、那么LocalTime和LocalDateTime也是可以拿相同的API去做相应操作。

5、日期时间格式化

我们知道SimpleDateFormat进行格式化日期时间,这种方式是线程不安全的。JDK8提供了一个线程安全的时间格式化类DateTimeFormatter。

/**
 * @author 小吉
 * @description jdk8新特性之日期处理
 * @date 2020/5/22
 */
public class Demo {
    public static void main(String[] args) {
        //JDK8之前SimpleDateFormat的用法
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(new Date()));//2020-05-22 23:05:39
        //JDK8 DateTimeFormatter的用法
        LocalDateTime ldt = LocalDateTime.now();
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(dtf.format(ldt));//2020-05-22 23:05:39
    }
}

6、获取指定日期时间对象
在这里插入图片描述

从源码中看到of方法可以通过传参来指定我们想要的日期时间

/**
 * @author 小吉
 * @description jdk8新特性之日期处理
 * @date 2020/5/22
 */
public class Demo {
    public static void main(String[] args) {
        LocalDateTime ldt = LocalDateTime.of(2020,5,20,10,10,10);
        System.out.println("指定日期时间:" + ldt);//指定日期时间:2020-05-20T10:10:10
    }
}

7、时间差计算

计算日期时间差我们可以使用java.time.Duration

/**
 * @author 小吉
 * @description jdk8新特性之日期处理
 * @date 2020/5/22
 */
public class Demo {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime last = LocalDateTime.of(2020,5,20,10,10,10);
        Duration duration = Duration.between(last,now);//时间差 = now 减去 last
        System.out.println(duration.toDays());//时间差的天数 2
        System.out.println(duration.toHours());//时间差的⼩时数 61
        System.out.println(duration.toMinutes());//时间差的分钟数 3665
        System.out.println(duration.toMillis());//时间差的毫秒数 219935588
        System.out.println(duration.toNanos());//时间差的纳秒数 219935588000000
    }
}

本节JDK8新特性日期时间就讲解到这里,小伙伴们可以在空闲之余熟悉一下这里面的API。更多关于JDK8常用的新特性我将在后续给大家讲解,感谢大家的围观。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值