自 Java8开始, JDK中其实就增加了一系列表示日期和时间的新类,最典型的就是 LocalDateTime。直言不讳,这玩意的出现就是为了干掉之前 JDK版本中的 Date老哥!

同样,我们也先来感受一下用法!

##一、获取当前此刻的时间

LocalDateTime rightNow = LocalDateTime.now();

        System.out.println("当前时刻:" + rightNow);
        System.out.println("当前年:" + rightNow.getYear());
        System.out.println("当前月:" + rightNow.getMonth());
        System.out.println("当年日:" + rightNow.getDayOfMonth());
        System.out.println("当年日:" + rightNow.getDayOfWeek());
        System.out.println("当前时:" + rightNow.getHour());
        System.out.println("当前分:" + rightNow.getMinute());
        System.out.println("当前秒:" + rightNow.getSecond());
        /*
        当前时刻:2020-03-08T22:59:57.957
        当前年:2020
        当前月:MARCH
        当年日:8
        当年日:SUNDAY
        当前时:22
        当前分:59
        当前秒:57
         */

##二、构造一个指定年、月、日的时间:

//比如,构造:2020年3月8日20时21分21秒
LocalDateTime localDateTime = LocalDateTime.of(2020, 3, 8, 20, 21, 21);


##三、修改日期

LocalDateTime rightNow = LocalDateTime.now();

rightNow =rightNow.minusYears(2);// 减少 2 年
rightNow =rightNow.plusMonths(3);// 增加 3 个月
rightNow =rightNow.withYear(2012);// 直接修改年份到2012年
rightNow = rightNow.withHour(13);// 直接修改小时到13时

##四、格式化日期

 String result1 = rightNow.format(DateTimeFormatter.ISO_DATE);
        String result2 = rightNow.format(DateTimeFormatter.BASIC_ISO_DATE);
        String result3 = rightNow.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
/*
2020-03-08
20200308
2020/03/08
*/

##五、时间反解析

LocalDateTime time =LocalDateTime.parse("2020--03--08 20:21",DateTimeFormatter.ofPattern("yyyy--MM--dd HH:mm"));
        System.out.println("字符串反解析后的时间为:"+ time);

//字符串反解析后的时间为:2020-03-08T20:21

##六、线程安全

上面讲来讲去只讲了两者在用法上的差别,这其实倒还好,并不致命,可是接下来要讨论的线程安全性问题才是致命的!

其实以前我们惯用的 Date时间类是可变类,这就意味着在多线程环境下对共享 Date变量进行操作时,必须由程序员自己来保证线程安全!

而自 Java8开始推出的 LocalDateTime却是线程安全的,开发人员不用再考虑并发问题