Java8之新特性--Date/Time API详解

本章主要为大家讲下Java8中的Date/Time API,这次更新弥补了Java对时间类型的短板!

一、概念:

1、Java8 Date/Time API相关的类:LocalDate,LocalTime,LocalDateTime,这三个类有一个公共特点就是同String类一样,都是密封类(final修饰),不允许继承(都位于java.time包下)

他们都有什么区别呢?

2、Java8之前我们常用 SimpleDateFormat dateformat = new SimpleDateFormat(new Date()); 的方式来格式化时间,程序中出现大量的SimpleDateFormat类,既不简洁实用,造成代码臃肿,而且可读性非常低

3、Java8以前使用new Date()获取月时,从0开始,每次都要+1。获取本月最后一天,要分情况判断28,29,30,31。非常麻烦,代码量非常繁琐。现使用Java8中的Date/Time API,问题都解决了!

二、LocalDate、LocalTime、LocalDateTime 分别获取当前日期:

public class DateTimeAPI{
    public static void main(String... args) {
        LocalDate.now();  // 获取当前日期 format: yyyy-MM-dd
        LocalTime.now();  // 获取当前时间 format: HH:mm:ss
        LocalDateTime.now();  // 获取当前日期时间 format: yyyy-MM-dd HH:mm:ss
    }
}

以上是对当前日期的获取,比较三者的输出(print console:)有什么区别:

print console:

2019-03-21
15:14:01.341
2019-03-21T15:14:01.341

Process finished with exit code 0

三、LocalDate -- API

类方法:

1、LocalDate nowDate = LocalDate.now();  获取当前日期:2019-03-21

2、LocalDate formatDate = LocalDate.parse("2018-08-08");  自定义时间:2018-08-08

实例方法:

1、nowDate.getDayOfMonth()  :21  (获取当天所属本月中的第几天)

2、nowDate.getDayOfYear()  :80  (获取当天所属本年中的第几天)

3、nowDate.getDayOfWeek()  :THURSDAY (获取当天所属本周的周几)

      nowDate.getDayOfWeek() .getValue() :4

4、nowDate.getMonth()  :MARCH  (获取当月所属本年的第几月,与new Date() 相比它是从1开始,抛弃了之前的从0开始)

      nowDate.getMonth().getVlue():3

      nowDate.getMonthVlue() :3

5、nowDate.getYear()  :2019  (获取年)

6、nowDate.getEra() :CE  (获取次日期适用的时代)

7、nowDate.with(TemporalAdjusters.firstDayOfMonth()) :2019-03-01(获取本月第一天)

8、nowDate.withDayOfMonth(2) :2019-03-02(获取本月第二天)

9、nowDate.with(TemporalAdjusters.lastDayOfMonth()) :2019-03-01(获取本月最后一天,无须再判断28、29、30、31)

10、nowDate.plusDays(1) :2019-03-22(获取下一天日期)

注:TemporalAdjusters类中有许多常用的特殊的日期的方法(类方法),使用时可以仔细查看,可以很大程度减少日期判断的代码量!

四、LocalTime -- API

类方法:

LocalTime nowTime = LocalTime.now();  获取当前时间:16:45:51.591

实例方法:

1、nowTime.getHour() :16(获取小时数)

2、nowTime.getMinute() :45(获取分钟数)

3、nowTime.getSecond() :51(获取秒数)

4、nowTime.getNano() :805000000(获取纳秒数)

5、LocalTime zero = LocalTime.of(0, 0, 0) :00:00:00  (构建自定义时间)

      LocalTime mid = LocalTime.parse("12:00:00") : 12:00:00

五、LocalDateTime -- API

类方法:

1、LocalDateTime nowDateTime = LocalDateTime.now();  获取当前日期时间:2019-03-21T16:45:51.591

2、DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

     String nowDateTime = LocalDateTime.now().format(formatter);

     使用自定义格式器DateTimeFormatter替换了Java8之前的SimpleDateFormat

实例方法:基于上方LocalDate与LocalTime的实例方法,名字相同,可直接调用

六、JDBC与Java8中的Date/Time API关联问题

最新的JDBC整合了Java8中的Date/Time API,将Java8中的Date/Time类型与数据库类型进行了映射

数据库类型 ->  Java类型

date -> LocalDate

time -> LocalTime

timestamp -> LocalDateTime

七、本教程就到这里了,关于Java8新特性系列的其他文章,关注本博主,参考Java8新特性分类中的文章!谢谢!有兴趣可以添加博主QQ:1402218191 !

你可能感兴趣的:(Java8新特性)