看完这篇文章,估计你就不会用学校教的方式创建日期了

前段时间学校教Java常用类库,学到日期的时候,我差点吐了一口老血。。。
在这里插入图片描述
先来看看我遭遇了什么吧:

import java.util.Date;

public class DateDome {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println("当前时间:" + date);
        System.out.println("当前年份:" + date.getYear());
        System.out.println("当前月份:" + date.getMonth());
        /*
        当前时间:Thu Apr 23 18:08:46 CST 2020
        当前年份:120
        当前月份:3
        当前日期:23
        
        本人写这篇博客的时间是:2020年4月23日
         */
        
    }
}

当时我在做一个类似于输出日期的作业,这真是令人有点窒息了。无奈我只能SimpleDateFormat一下。
在这里插入图片描述
为了究其原因,我就去查了一下api,简单看一下这个类中的方法,我发现令人震惊的一幕:
在这里插入图片描述
这总共才几个方法啊,就已经被弃用6个了。。。更过分的是:
在这里插入图片描述
连构造方法都被弃用一个了,合着我跟着学校学了一个被弃用的类?

更令人我无法忍受的是,当我尝试着使用Date类自定义一个日期的时候:

import java.util.Date;

public class DateDome {
    public static void main(String[] args) {
        Date date = new Date(2020,1,12);
        System.out.println("当前时间:" + date);
        /*
        当前时间:Thu Feb 12 00:00:00 CST 3920
         */
    }
}

在这里插入图片描述
这是不是意味着如果我要自定义时间还需要提前计算一下?


这属实太麻烦了,不过一想到学校用的还是jdk6,我就能理解学校为什么教这个类了。

那么现在最流行的jdk8有没有更好的解决方法呢?这不是必须的嘛,作为一个文化人,我今天给大家介绍在学校遇不到的LocalDate和LocalDateTime类
在这里插入图片描述

import java.time.LocalDate;

public class DateDome {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println("当前时间:" + date);
        System.out.println("当前年份:" + date.getYear());
        System.out.println("当前月份:" + date.getMonth());
        System.out.println("当前日:" + date.getDayOfMonth());
        /*
        当前时间:2020-04-23
        当前年份:2020
        当前月份:APRIL
        当前日:23
         */
    }
}

在这里插入图片描述
但是似乎也有一个不太好的地方,就是不能获取时、分、秒,这就有点糟心了。。。
莫着急,让我们来瞅瞅LocalDateTime类:

import java.time.LocalDateTime;

public class DateDome {
    public static void main(String[] args) {
        LocalDateTime date = LocalDateTime.now();
        System.out.println("当前时间:" + date);
        System.out.println("当前年份:" + date.getYear());
        System.out.println("当前月份:" + date.getMonth());
        System.out.println("当前日:" + date.getDayOfMonth());
        System.out.println("当前时:" + date.getHour());
        System.out.println("当前分:" + date.getMinute());
        System.out.println("当前秒:" + date.getSecond());
        /*
        当前时间:2020-04-23T19:04:53.640
        当前年份:2020
        当前月份:APRIL
        当前日:23
        当前时:19
        当前分:4
        当前秒:53
         */
    }
}

在这里插入图片描述
那么自定义日期是不是类似的方便呢?瞅瞅下面的东西 :

LocalDateTime date = LocalDateTime.of(2020,10,20,10,20,10,20);

在这里插入图片描述
最牛逼的直接精确到纳秒
在这里插入图片描述
看到这里我琢磨着屏幕前的你对LocalDateTime类就了解的差不多了,下面直接来看代码:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import static java.time.format.DateTimeFormatter.ISO_DATE;

public class DateDome {
    public static void main(String[] args) {
        //创建一个2020年4月23日19时16分的时间
        LocalDateTime date = LocalDateTime.of(2020,4,23,19,16);

        //减去一年
        date = date.minusYears(1);
        //增加一个月
        date = date.plusMonths(1);

        /*其他的也类似,下面高能*/
        date = date.withYear(2050);//直接将年份修改到2050年

        /*当然最常规的格式化操作也少不了*/
        String dateFormat = date.format(ISO_DATE);

        /*当然他也可以把字符串转换成时间,如果想格式化日期,就是用LocalDate*/
        String str = "1987-04-23 19:30";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
        LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
        System.out.println(dateTime);
    }
}


你以为这就完了?
在这里插入图片描述
太天真了大学生

我们可以在源代码中看到,对于LocalDate和LocalDateTime都有同一句描述:
在这里插入图片描述
线程安全!!!
线程安全!!!
线程安全!!!
这是Date类所不能比拟的最大的优势!!!

那么对于格式化类DateTimeFormatter呢?
在这里插入图片描述
线程安全! 这又是SimpleDateFormat所不能比拟的。要知道SimpleDateFormat是Date类对象格式化的途径啊!!


一言以蔽之,在LocalDate和LocalDateTime两个类里头,你可以放飞自我,完全不用担心线程不安全!


看到这里你还会执意的使用Date嘛?
如果以后我要是看见谁用了Date,我只能这么回复他
在这里插入图片描述
用了LocalDate和LocalDateTime,咱们都是
在这里插入图片描述

发布了34 篇原创文章 · 获赞 27 · 访问量 5831

猜你喜欢

转载自blog.csdn.net/weixin_46192593/article/details/105713381