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

Judy ·
更新时间:2024-11-14
· 777 次阅读

前段时间学校教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,咱们都是
在这里插入图片描述


作者:治怒善男



学校

需要 登录 后方可回复, 如果你还没有账号请 注册新账号