00:00
好,那么这一章的话呢,我们跟字串相关的这个类呢,我们就告一段落了,接着我们来看这个日期时间相关的API。啊,这个我们在实际开发这个相关的项目的时候呢,都会用到一些时间相关的一些类了,那我们下边呢,就来讲一讲,这边要讲的话呢,其实稍微的还得多讲一点,为啥呢?因为这个日期时间API呢,它经过一些迭代啊嗯,我们这里边迭代的这个分界线呢,就是GDP8。JD8之前呢,有一些常用的API,然后GD8呢又入一些新的日期时间API,所以呢,我们先来给大家讲讲JD8之前的。啊,虽然说呢,GD8呢,距我们已经很长时间了,但是现在呢,之前的这一片呢,实际上呢,目前使用的频率呢,还算是比较高的。所以我们得讲,然后这个地方呢,引引入一些新的API,新的里边呢,我们就讲几个长的,主要呢,就说这几个就可以了。好,那我们先说这个之前的,之前的这块的话呢,我们首先呢,稍微提一下这个里边呢,有一个叫current。这个呢,其实我们在前面都已经用过了啊对它呢,获取当前的这个。
01:01
时间的这毫秒数是吧。哎,这个我们说那叫。获取啊,当前。哎,时间对应的。这个叫毫秒数啊,这个对应的毫秒数呢,它首先它是个浪类型的。然后能把这个事儿呢,其实就称为呢,叫时间戳了啊。哎,时间戳指的就是我们浪形的这样一个值。OK,那这个数的话呢,它其实是。啊,有特点的是距离我们1970年啊,1月1号00:00:00是吧,到现在的这样的一个毫秒数。当前时间,这个得毫秒数。嗯,这个我这样啊。CTRL一下粘过来。那么这个的话呢,你可以看到是呢,咱们以前上学的时候呢,学这个数轴嘛,啊,你可以看到,于是这个数轴的一个起始点就塌了,然后所以呢,最后呢,我们这块呢,当前时间对应的相当于是个刻度了,这个呢是一个毫秒数。
02:10
啊没问题,然后呢,我们开发当中啊,常用这个方法用来做什么呢。常用来是不是计算时间差呀?时间差OK,行,这个呢,就我们说的这样的一个方法,这个我都不用刻意的去测了,因为咱们前面也都用过了,然后接着来看下边这个叫两个date类。啊,从这块儿开始,我们说一下有这样的,嗯,几个类的一个使用,所以呢,在这里边儿呢,我们去新建一个。这呢,我就称为它叫date时间啊,日期时间的啊,相关的这个测试。啊,第一波。这儿呢,我们来说一下这个date类的使用。这个date类的使用啊,它其实有两个啊,哎,那么第一个的话呢。是。诶,这个来一个竖线啊,第一个的话呢,是我们java.u这个包下有一个date类。
03:07
然后呢,还有一个类。对,另外这个呢,它是在诶java.circle包下有个date类,然后这两个类的话呢,还有子符类的关系。你看我这样写的就是S报下来这个date呢,是这个date的一个子类。那这个稍微注意一下,然后关于这两个类话呢,我们就非常明确给大家说呢,我们需要掌握的事儿啊呃,关于这个先说这个U下的data,它呢有两个构造器。两个构造器的使用,然后呢,对应着两个方法的使用。就完事了,来,我们首先呢说一下它那勾造器呢,就涉及到我们去造他的对象了,然后就data一个DATA1你一个date。然后这个D的话呢,我们需要显示的指明这块呢,是我们u to下的先说它,那这呢就是空餐的过道器。没问题,好,那我们现在去打印一下这个DATA1,相当于呢,我们就在用它的一个方法叫做to string了,是吧。
04:07
图这个方法了,好,我们去run一下。行出来了,那我们来看一下这个时间,2022年的这个11:49,这个是吧,这是中央标准时间,这个呢,是我们12月5号的星期一啊,其实这块列举出来是不是就咱们当前系统的时间。哎,所以这块我们写一下啊,通过这样的一种方式啊,咱们相当于呢,叫。创建一个。嗯,创建一个啊,基于当前系统时间的date的实例。没问题吧?这个调突方法的话呢,就是以一定的方式呢,给我们展现出来了这样的一个时间,而且呢,还我们都能看懂是什么意思,OK。这呢是其中的一个啊,构造器其中的一个方法啊,所以两个方法使用的话呢,其中一个方法呢,就叫做这个图死润了。
05:02
那就它好,那么第二个方法呢,我们称为它叫get time。来看一下这个DATE1呢,我们叫get time,大家看一下它的反问值。Long类型是吧,那当前这个系统时间我们这块呢是可读的,那你看到还挺有意义的,那该time呢,其实就获取他的这个对应的这个毫秒数了。哎,我叫米。At times。哎,就是这个毫秒数来打印一下,然后我们可以说啊,对应的毫秒数为。啊。Many times,好,走一下。你看就是这个数,这个数的话呢,其实对于我们来讲呢,就比较抽象了。咱就看不太懂了。嗯,这呢,其实就说的当前系统时间,你造这个对象的时候呢,有一个时间,那个时间呢,还是距离1970年这个,呃,1月1号00:00:00啊,到现在一个毫秒数,这样呢,就相当于把这个毫秒数呢给拿到了。
06:05
行,这呢,就我们说的这个第二个方法获取的是一个浪形的毫秒数。然后呢,我们还有一个构造器。哎,Date date2,哎,你一个date。哎,在我们这个位置,咱们CTRLP一下。你会发现呢,针对这个date呢,它有好多的构造器和方法都被deprecated了。过时了啊,不让用了,哎,其中还留着两个,一个呢,就是刚才说的这样一个构导器,还有一个呢,就是它。啊,传一个浪形的值,其实你也能猜到了,是不是就这个毫秒数啊?那如果把这个数呢,传进去,其实就是我们刚开始的时候呢,在造这个对象的时候的那个时间了。咱们稍微的改一个吧。比如说这个位置我改成个零,那就是之前的一个时间了,这个呢,它不能当成int类型,因为太长了,加个L。类型的,所以呢,这个呢,我们相当于是创建一个。姬羽。指定时间戳添加时间戳吧。
07:04
哎的贝的对象是吧。应该就它了,好,那这个呢,到底是哪一天呢,咱们可以呢,是调这个to string呗。然后打印一下,看一看这个呢,咱就改一下这个也说不好是哪一天了。嗯,看一下2022年的这个是。还是我们这个。12月5号这个咱们改的这个数比较。不太靠后了是吧,所以呢,就是九点多你要改一个特别靠前的一个数,改成一个三。这个呢,就变的幅度就大一些呗。2013年了是吧,那就这样一个情况。好在这呢,就我们说的这个两个构造器啊,两个方法的使用比较简单。哎,这个就过了,那么其他的关于这个date当中,你看我们这个CTRL f12一下,它里边你看有好多的这个功能呢,都被de了。
08:00
啊,这里边儿有一些这个呢,啊这些的话呢,你看都是一些静态的结构。啊,静态结构这个呢,我们暂且呢,就先不多去看了啊,你要从我们这个API这个角度来看一下的话呢,文档。在这儿。来输一下我们这个data。U,是吧?哎,这块看一看。改了。啊,这块这个方法这块你看。大批量的pre是吧。这样的情况啊。好,这呢是我们说的这个事儿,然后呢,接着我们来看一下它这个子类啊,这个子类呢叫做circle.date如果说呢,这个date的话呢,是比较具备通为通用性的啊,然后这个磁扣点data呢,就会有它具体的使用范围。那我们后边呢,会讲这个数据库。啊,简单的话呢,大家呢,可以再去看一眼,这呢是我通过一个客户端呢,连接了一下这个数据库服务器,然后本地电脑呢也装了,然后呢,在这个数据库当中,我们会有一些表,表里边儿呢,我们会有一些。诶,日期相关的一些字段了,比如我们这里边设计刻画的就是相关的一些员工的他们的生日是吧。
09:07
那么这里边儿呢,就涉及到一个年月日。哎,然后呢,我们可以通过这样的方式,比如我这块呢,叫改变表,你会能看到我们这个birth呢,就是个date类型的。那么这个date的类型跟咱们Java里边的啊一个类型呢,会对应啊是哪个呢?就是这个。也就是说咱们Java里边呢,如果我要有个date的这个对象啊,是某一个指定的时间是吧,然后放到我们数据库里边呢,就对应的就是这个类型的。啊,这个大家稍微对应一下,因为以后呢,我们要用Java呢来操作数据库嘛。那数据库里边的这些数据啊,像我们刚才看到这个数据,它呢,要是回归到Java层面,这个呢,它应该对应着一个。变量是吧,这个变量是谁呢?哎,对应的就是它。啊,所以这块我们写一下啊,它对应着啊,数据库中的这个date类型。
10:00
啊,这个大家注意一下就行了,好,那关于这个data的话呢,我们也是看一看它如何呢,去创建对象。啊,第二个啊,那由于呢,我们在一个文件里边呢,已经用了这个date了,而且上面还导包显示了,所以这块我要写的话呢,是不是就写全类名了。得写全。这个叫对一又一个。Circle下的data,哎,得这么着,但这块你刚写完就报错了,所以呢,它没有空参的构造器。这块呢,你可以回到API这块,我们看一眼,咱搜一个date。蛇下的是吧。构造器这块的话呢,你看有俩这个呢,还被DEP了,留着一个只能放一个long形的一个时间戳。嗯,所以呢,你只能是放个时间戳,比如说我就把上面这个呢,我拿过来了。那就放到这儿了,它呢,就这一个构造器可以使用。那打印一下这个DATA1相当于呢,是不是也掉他的这个to string了。来,我们走一下。
11:00
他这个图存针的话呢,跟我们上边优秀亚这个图存针打印的效果你看不一样啊。他呢,是不是只有这个叫年月日了?所以你从这个角度来看的话呢,上面它这个刚才我们在打印的时候呢,还包括很具体的这个十分秒。啊,还有这样的这个详细的这个信息。啊,比如说这个了,那你看一看它这个打印这个效果也能知道我们在这里边对应的话呢,是不是也应该是下的。啊,这个没有十分秒。啊OK啊好这呢,就我们说的,他来那么多余的问一句哈,你说我们这个思下这个date这个对象,它不是也是对应的一个时间吗。这个时间里边包含了这个毫秒吗。或者包含十分秒吗?包含包含,你看这没有啊,包含吗。诶,对的啊,包不包含你这样来,你看啊,我拿着这个DATE1我呢也去get一下。我打印一下。来,你看一下这个get time,这个时间戳是不是跟它完全一样。
12:05
走一下。是不是完全一样?完全一样呢,这个呢,显然是包含毫秒了是吧,那所以这块呢,你是不是也包含。对,那IG呢,就是我们只是呢,调to string的时候呢,它没有显示那个所谓的十分秒,它其实也包含具体到这个毫秒级别了。OK啊,那这个稍微的大家关注一下就可以了。行这个呢,就咱们说这个思下的这样一个date了。啊,没问题。嗯,这个呢,我们就说到这儿啊,然后呢,关于我们这个对折的使用呢,大家就只需要呢,注意刚才我们提到的构造器的问题,方法的问题的使用就行,它这块呢,只有一个构造器,就是代餐的这个构造器。啊,就没了啊。接着上午那内容啊,咱们继续往下讲,讲到这个日期时间的API了,这个八之前的这块,我们说完这个date了,然后接下来的话呢,我们再说一个呢,就对应的是这个叫simple form,这个类呢,你看它挺长的,这个是做什么用的呢?来首先我们看下这个课件在这个位置提到的。
13:08
所以呢,我们这儿呢,是一个类,它是在这个test下的,你发现它不是在这个U下的,它呢是一个不与语言环境有关的方式来进行格式化和解析日期的一个具体的类。啊,这块可能大家看不懂,看不懂说什么叫格式化,什么叫解析,来回过来我们看到呢,咱们在写这个date这个代码的时候呢,我们在打印的时候,它打印的是这样的一种格式,这个格式里边呢,包括这儿呢,是12月的意思,这个是Mandy周一的意思,这里边儿呢,包含了一些呃,不是很清晰的这样的一些标识啊,包括呢,它默认的这个格式呢,你看上来就是星期,这边呢是月,这个呢是日,然后这个年呢,写到最后了,这儿呢,可能跟我们平时想让它显示的这种格式啊不太一样。如果呢,你希望呢,它按照某种格式呢去显示,我们就可以使用现在咱们讲的这个SIM form。
14:00
那其实这块你看它显示的其实是个字符串啊,说白了就是我们可以把一个日期型的一个对象转化成一个字符串,这个字符串呢,是按照我们按照我们指定的这种格式来显示的。那这呢,就是叫格式化了。什么叫解析呢?解析就是它的一个逆过程,就是你把这个字符串转换为对应的一个,呃,时间。啊,那这呢,就是属于一个解析。好,这块我们写一下啊,现在我们要讲的呢,是这个叫a simple。嗯,Date。Format啊这样的一个类,它呢是用于啊这个日期时间的这种格式化解析操作的。OK,那首先呢,刚才我们提到了一个什么叫格式化。文化呢,就是将一个日期转换成指定格式的字符串。啊,有点像我们这个字符串一样,只不过这个呢是它默认的一种格式,然后呢,我们反过来。就叫做解析。
15:01
就是将一个字符串。指定格式的字符串转换为一个日期。啊,就是这样一个场景,好,那咱们下边来看一看该如何呢去使用。啊,那要想使用的话呢,这块我们需要用SIM data form里边呢相关的方法了,那要用这个方法的话呢,我们得首先创建它的对象。所以呢,首先啊simple data啊,比如说叫SDF吧,哎,你用一个。A simple data for me。好,这儿呢,我使用是一个空餐的构造器。使用空调构造器,接下来,哎,拿着SDF点我们去叫format。啊,Format呢,翻译过来就是格式化的意思。格式化就叫做form,好,然后这里边放呢CTRL一下,我们就可以一个具体的一个date了。那就是一个日期行,那没有没有,咱们提前造一个。这个date的话呢,就是U下的date了,所以我们把这个date呢,CTRLC一下给它扔进去,那这时候呢,他们out回车自动的就会生成一个字串。
16:04
啊,这个呢,就是一个字符串了,然后我们可以打印一下这个字符串。好,我们这儿呢,点一个执行。哎,这又出来了,这时候我们看到呢,这个格式呢,是涨诶这个样子的,二二年的12月5号下午02:21。哎,这样的情况在这儿呢,显然呢是一个字符串了,所以呢,我们这里边儿提到的这个form就要格式化,相当于呢,就把这个。日期呢,转化成是一个指定格式的字符串了。当然这块大家可能说,诶我也没有指定格式啊,咱们一会儿说这呢是它一个默认格式,那接着呢,咱们把这个过程呢,先反过来呢,再去演示一下,那就是把一个字符串呢,转换为是一个日期。那这呢,我们就可以还拿着这个SDF点二解析呢,这个呢叫做pass。Pass是吧,有这样一个方法,这个方法里边呢,咱们就可以传一个字符串了,这个字符串的话呢,注意你不能乱写。
17:00
什么意思啊?就是这块呢,我们格式化的时候呢,它默认的格式化出来以后呢,就长这样一个格式的字符串了,那你解析的时候呢,它也只能够认识这样的一种格式。你比如说这块呢,我们是二二年的12月5号,你总不能说二二年的5月12号吧。啊,你不能这样反着来,它呢,就认这样的这种格式的,包括后边的也是一样行,然后呢,这个填进去之后呢,我们就可以返回是一个具体的date了。诶就这么着,然后这块呢,它可能会抛一个异常,我们out回车一下,呃,你抛你就知道了,叫解析的一个异,为啥呢?因为有可能你写这个呢不靠谱。他呢,就说解析我解决不了。那就这样个场景,比如说这块大家写的话呢,你得写他认识的这样的一种格式的形式,比如你这块改成个三点,这都没事儿,那在整体格式的话呢,应该给他这是一样的,那么得到的就是一个date,我们把它呢也打印一下。看一看这个情况,走起。嗯,这个就没问题,你看这块呢,就我们这个下午03:21了啊,这个因为咱们写的是三点,那这里就没问题好了啊这呢就我们说的叫格式化和解析,但是咱们一般要用的话呢,通常都不爱用它这种默认的格式了,我们可以呢指定自己的一种格式了,所以这块我们再写一个例子,这块呢写一个四了。
18:17
行,那么此时的话呢,咱们可以怎么着呢?我使用指定的这种格式来去进行格式化和解析了,那这个涉及到了我们要放一个参数了。这个参数化呢,其实也是一个字符串类型的,那这块都怎么去写呢?我们可以看看这个类的一个API啊,回过来这块我们输入一下SIM form啊,点进来好往下走。这里边儿呢,我们可以使用的这样一些参考呢,就这里边呢,给的这样的一些字符了。啊,一开始不知道咋用,那咱们可以直接呢,看看它里边有一些例子,比如这个examples。我们可以呢,随便挑一个吧,比如说就挑这个吧。随便挑的,你挑哪个都行,好把这个呢CTRLC一下拿过来,我呢就往这儿一扔。
19:00
相当于呢,他此时呢,如果拿到一个date,把它作为一个格式化,格式化之后的字符串就长这样的格式。就这个意思行,咱不妨呢,比如还拿上面这个例子啊,我们CTRL一下。给我们在。粘过来是吧,这个呢,还是一个格式化的操作了。嗯,看一下这得到一个date放进去,然后呢进行格式化,这时候呢,你这个date呢,就会按照这种格式呢去显示来,我们走起一下。行,那就长这样了,通过这个结果呢,我们也大概能看到这个意义呢,表示的就是星期几的意思了,然后呢,这个D呢,就是几号五号啊12月,然后呢,这是年,这个十分秒,这个呢叫。十区是吧。咱们是在东八区吗?那就这样一个场景。行,那这呢,就是我们说从这里边呢,随便咱们挑了一个啊这样去查看的,那你也可以挑别的,那这里边儿呢,就涉及到了有相关的一些这种字符了,那对应的字符什么意思呢?再往上翻。
20:04
这不就在上面这块来说了吗,比如这个Y,这个Y呢叫year啊,大Y呢叫weak year。是吧,哎,你说有什么区别,这个你可以咱们自己试一下就知道了啊,然后那个大M呢。月是吧。这个呢,也叫玉。啊,有一些区别是吧,然后这个W这叫week啊,这个呢是一年当中的第几周,这个呢是一个月的第几周。这个呢是一年中的第几天,这是一个月的第几天,所以呢,它表示的意思呢,不太一样。行,这块呢,我们就看一看就行,然后呢,咱就直接呢来这块来写了,我现在比如说不用它这种格式了,那这块我们可以呢换一下,比如我就直接在这儿呢,重新的给它再去扭一下了啊SIM formit,咱们要是常用的话呢,实际样呢,就是年月日十分秒。这个年的话呢,诶,咱们习惯都用这个小写的四个Y。OK,年月。刚才我们看到了。是大MM。
21:00
呃,大美眉是吧,啊,然后呢,D呢两个D。一号,比如说31号啊,30号啊,其实就是两位数就行,所以两个D啊。然后呢,十小时小时这块的话呢,挪过来看一眼。R是吧,这R的话呢,你看这个大H的话呢,它是24小时值的。嗯,小H呢,在这儿,它是12小时之内,你发现了吗。是有个区别啊,所以这块就看你想用哪个了,比如说这块我们要写这个小H,那就这样了。然后那个分钟呢叫minute minute不是跟那个month呢,你看都是M开头的,所以这呢是一个小美眉是吧。啊,小写的MM了,然后呢,再冒号秒。Second是吧,SS这就可以了,行,习惯上我们都一般呢用这个啊,当然这个H的话呢,我们可以等一下换一下看看,把它呢画完以后,我们再去做一个formit头齐。行,你看这就呈现的就是这个效果了,这个呢是零二就是下午就是两点,这个两点呢,有可能说分不清楚是凌晨两点还是下午两点,这是因为我们用的是这个大写的H,小写的H了,你要换成大写的H呢。
22:10
这个就能区分了。就这样是吧。所以呢这呢算是咱们比较常用的这样的一种格式。哎,我就放到这儿了。这叫格式化,那对应的我们叫做解析。来解析这个操作CTRLC啊拿过来好,下边我来解析了SDF点我们第二个这个pass这个操作解析的话呢,我们可以把刚才这个字符串呢,给它放进去。把这个放进去。这呢就做个解析了,然后这呢也给他也抛一下是吧,得到了就是一个date。哎,就这样了。D点二好,这个呢,就把它又还原成是一个日期了。这个就是它默认的一种格式。行,这个呢,就是我们说的这样的一个意思,这里边儿有一个点大家需要去注意,注意什么点呢?你看我们现在呢这块呢,是它IDF对应的是这个啊,诶这个它只能解析这样的格式的。
23:09
你不能让他去解析,像咱们上边的框架是不是自动的一种是吧。像这个。咱们这儿呢,是一个空仓的构造器,它呢格式化出来以后,那个字符串呢,它长这个格式,这是它默认的格式,这个格式字符串跟这个呢,是不是不匹配啊。那也就是说呢,如果你要是拿着还是这个SDF点,我去做这个pass这个操作,然后呢,你把咱们上边这个字符串拿过来,让他呢,去解析出来一个date这个靠谱。是不是就不太靠谱啦?什么叫不靠谱呢?就是他会,他呢会抛一场了就。你看这不就挂了吗?这块呢,是在我们这个79行,这不就在这儿吗。这个能理解吧。就是他这个CF的话呢,他这不是认识这样的格式吗。然后呢,你这块呢,写的这个呢,是不是跟这个你看匹配不上吧。比不上的话呢,它就会抛异常。
24:01
这个格式呢,你是使用的你默认的这个构造器,默认构造器呢,它就认识这样的格式,而我们这里边儿呢,只认这个格式,所以呢,你填的填的这个字符串呢,也只能是这个字串跟这个格式呢是匹配的,一旦要不匹配,那就解析呢就失败了。哎,这个我们在这儿注释一下。这呢就是诶解析失败啊,因为啊,这个咱们参数的这个字符串不满足咱们这个SIM data它能够识别的格式。行,这个呢,大家注意一下这个事儿啊就可以了,这呢就是我们说的格式化解析,那我们呢,可以呢,做相关的一些题目了,这个题目呢,其实我们在这个课后题这块有。啊,这个就在这儿了啊,咱们一会儿呢,可以去写一写,比如说你看有这样的需求,我们呢,在这个控制台呢,可以去输入一个年月日,比如呢,就输入的这一天,这呢,其实就得到一个字符串了,现在的话呢,我希望呢,你把这个字符串的信息呢,保存到我们这个数据库当中。就相当于呢,我们这个还是通过这个客户端呢,去做一个查看。
25:04
打开呢,比如我们这个表。打开标以后呢,我们这个位置呢,这不填的都是一个具体的年月日吗。那我们就相当于呢,在Java的这个控制台上呢,我们去写一个年月日,写完以后的话呢,诶我一点回车,相应的你把它写入到数据库,当然呢,操作数据库这个事儿呢,咱们还没做。我们呢,在Java代码层面,你先得到一个伺候下的一个date对象就可以了,这个date对象呢,要求是对应的这个年月日。那我们就需要用到这个simple data form。嗯,OK,咱们等一会儿呢,来写这个题,诶咱先把这个后边这个API呢,咱们讲完这个呢,实际上我们要讲的第三个API了。啊,第一个是我们对应的这个是吧,哎,第二呢,是两个data的使用啊,相对应的,咱们把这个笔记呢,也给它粘一下啊。And。这呢是咱们这个第二个。行这第二个,然后第三个呢,就我们说的这个SM的formit,它的呃,主要的操作呢,就是用于格式化和解析的。
26:03
啊,详细的这个代码的话呢,咱们看这个。哎,写的这个程序呢,就可以了,这是它了行,然后最后一个我们要说的这个V8之前的API呢,叫做calendar。那就他啊,Calendar的话呢,翻译过来叫做日历。哎,就他。日历,比如我们看到这样的一个日历,其实呢,就可以理解成呢,是这样的一个类呢,诶我们可以呢,去创建的一个实例啊,像这个手机上咱不是也有这个对应的这个时间嘛,当然一般呢,咱们都很少去修改这个日期时间了,因为联网以后呢,它会自动的做个修改,其实上你要在这个设置里边的话呢,经常你会发现在这个年月日啊,它都可以去改。比如呢,就跟一个呃罗盘一样是吧,这个呢,现在显示的是2022年的,就12月几号了,这个你它有时候一个减号一个加号,你点加呢就加一年,点减号呢就减一年啊也可以呢,就是跟滑轮一样,这样滚滚一下,然后再给你挑一个时间。嗯,这个都可以,然后这个调调节调的话呢,其实可以理解成呢,就是针对这个这个实例呢,进行一个修改的。
27:01
好,这是我们说的一方面,另外一方面的话呢,我们发现呢,这个date这个类大部分的API呢,已经被DEP了,这个呢,可以解成date呢,相当于我们是第一代的日期时间的API。然后呢,第一代呢,有很多被de以后呢,就被这个第二代的这个calendar呢给替换了。哎,这样的场景,比如说大家你看一下我们这个date的时候啊,CTRLN啊,我们这呢,输入一个这个叫data。咱们就看这个U下的吧。然后呢,我们找它的,比如说某一个构造器啊,像这个构造器,然后他在上边呢,那这就明确写了。说呢,在我们1.1这个版本当中,他replaced by。你看1.1呢,这个data呢,这个构造器就不用了,它被我们calendar里边的这个方法呢给替换了。那下边这个类的话呢,它其实也是这个calendar的一个具体的子类了哈,相当于呢,这儿呢,是我们说的第二代的这个日期时间的API啊,就是我们现在要讲的这个叫calendar这个类啊。好,那关于这个类呢,我们做一个说明。
28:01
那我就写到下边了。Calendar这个单词呢,别写错了,叫日历类。就它行这个类的话呢,有点特别,怎么讲呢。你往这一放。啊,一进来首先呢,发现它是一个abstract。抽象了啊3D呢,它不能够实例化是吧。行,那这块我们实际上要用的话呢,应该是用它具体的一个子类了,它这个子类的话呢,你看这块提到的就是这个类。这里看,哎哟好长啊。是吧,诶那就是要么呢,你去你用这个类的对象或者的话呢,这个cend的话呢,它有一个方法,这个方法呢,叫做get instance。看这有好多的属性。这个我们找叫get instance这。这个方法一调用的话呢,它就能够返回一个叫做calendar的一个实例了,其实这块返回的实例呢,也就是我们刚才看到的它的那个子类啊。行,那这块我们就从他创建实例呢开始说起。
29:03
这个咱们是第五个了。啊,这块要讲的话呢,其实也就是俩事儿啊,第一个啊,第一个问题实例化。啊,实际化呢,这块我们提到哈,说由于。开了点儿。啊,是一个抽象类。哎,所以呢,我们需要呢,创建。啊其啊此类的这个实例。那这里呢,我们通过。通过什么呢?这个calendar的静态方法就可以了。这个静态方法呢,叫做get instance。啊,即可获取。行,就这意思,好,那就这块来了啊,直接呢,我们就calendar。第2GET一个instance,那就掉它,然后呢,我们out回车一下,直接呢就拿到一个calendar的一个实例了,这时候我们可以打印一下这个calendar。啊,这个打印它啥呢,我这么着啊,Get一个class,诶看一下你当前这个对象呢,它的类是谁。
30:07
好这块你看我们看到就是这个类了。哎,这个类呢,不就是我们刚才在这里边看到的它的这个子类吗。啊,这玩意儿,这不就它的这个子类嘛,所以呢,你可以直接拗这个子类对象,但是通常我都不这样做,因为它太长了,你看是吧,所以我们一般呢,习惯上就直接调这个静态方法就可以了。好,我把这个呢就入掉了,这个呢是我们说如何呢,去实例化啊,第一个事儿了,那么第二事儿的话呢,我们就看看里边常用的方法。这个常用方法呢,这块就涉及到了一系列的这个get操作啊,Int类型的一个叫field。啊,有get,有这个相关的这个。Field,然后呢,我们给他去设置对应的这个值,这是两个主要的。啊,然后还有呢,这个具体叫爱啊相关的这种操作。这是这个,然后相呢,还有这个叫get time这个操作,还有呢叫set这样的操作,哎就这么几个啊行这块我们简单说一下就可以了。
31:04
怎么讲,首先呢,就让我们来测试这个方法。拿着这个看着点。第二咱们去调这个get啊,这里边呢,需要填这个叫field,这个field怎么写呢?实际上你就发现呢,我们在这个can里边呢,你看往下走这块不就有好多的这个叫field吗。好多这种属性。啊,然后这些属性的话呢,我们其实呢,就可以呢去调用一下,比如说啊这呢都是这种静态的了,咱们通过这个calendar点啊,可以去调这个单呢,你调的话你得看看,有的呢,你调没有啥意义了,有的呢有意义,比如说我们想看一下今天是这个月的第几天。就掉这个。叫day of month。那就可以了,好调完以后呢,我就直接打印了。就这样啊,还可以,比如说我们calendar get一下。Calendar。第二,这个我们叫a day week啊,这一周的第几天。啊,Day year,这一年的一天啊,类似这样的这个场景。
32:04
行,我就调这俩,以他俩为例吧,哎,我们在这做一个run。好,这个这个月的第几天,这个月的第五天,嗯,这一年的第339天,这个月的第五天,诶就这是吧。那这就可以了,行,还有其他一些属性啊,这个我就不多说了,这个咱们测试的话呢,这个就是对应的这个操作叫get。哎,行就它了啊好,然后下边的话呢,咱们来测试一下,这个叫set。啊,就大家呢,能有个印象是吧,就可以了啊,然后呢,我还是拿这个开的点,我去赛一下,这呢就是我们对应的第一个方法了,首先呢,你把这个属性写过来,举个例子,比如说咱们就拿这个月的第几天来说吧。哎,这呢往那一填,然后这块呢,我写了23。下面呢,我就把今天呢,改成了咱们是这个月的第23号了。啊,那这个改完以后呢,我要是再去打印一下这个。Dave的话。
33:02
那我再打印的话呢,这时候你看一下走起。你看是不是就给改了。哎,就改成这个月的第23号了。OK啊行,这个大家理解一下,然后这个set方法呢,我们点进来看,它是个word的,相当于它不是说这个返回值呢,是你改以后的,而是呢,就把我们当前的calendar给改了。啊,这个大家稍微注意一下好,这叫赛操作,其他的我就不演示了啊,然后这块还涉及到第三个呢,叫做I操作。A呢,就是在现有的基础上呢,我们去做这个累加,比如说还是拿里canadaalend点,我们去调A,然后这里边呢,我还写这个calend点叫day of month,然后在现有的这个。这个天的这个基础上呢,我们加上三天。这就加的意思,加完以后的话,我再看一下是这个月的第几天。这段儿啦。是不是刚开始23了,已经对这就变26号呗。
34:02
诶,你看这就26号了,行,然后呢,把这个呢再复制一份,我这呢想往前推。哎,我减一个五。对,相当于就是还可以呢,就是减几天,这个没有呢,叫miniins的方法,就是加,加的时候加个复数就行。就是往前在相当于23号基础上,再往后推三天,往前再推五天是吧。21号吧。哎,这就变成21号了。那就他行,这个呢,就叫做爱的操作啊行。嗯,这个呢,就有点儿类似于咱们刚才说的这个年月日这块呢,它不是在月日日这块呢,一个减一个加,减一下,它就相当于往前推一天,再减一下就再推一天加加一天就往后移一天。那就这块这个操作了,行,后边这块呢叫gettime,那因为呢,咱们说它属于这个第二代的日期时间API了,所以它跟第一代之间呢,可以有一个转换,那么这个get呢,其实就是这个转换的操作了。
35:00
哎,你看啊这呢,我们拿着这个看点,咱们叫get time这块呢,它返回的就是一个date。哎,我们打印一下这个data。啊,把它呢,再跑一下。行,你看这这条的话呢,对应的就是咱们12月的21号啊,因为咱不是已经给他改了吗。就是21号了。啊,这个呢,就是从这个calendar。哎,把它呢,得到一个具体的date啊,咱们使用的这个方法。哎,这个呢,注意一下它好这呢是它了,然后呢,我们这个current的话呢,还可以有一个叫set time。赛这块呢,你可以传一个data。啊,传一个就相当于呢,你可以拿指定的一个日期的对象呢,重新重置一下当前这个calendar了。啊,你比如说咱们现在就date。啊,我就对你有一个具体的date。行,然后这块呢,咱们都清楚获取的是当前的系统的这个当前时间了,就是还是12月5号了,然后把这个DATE1呢,咱们放到这里边。
36:04
那相当于呢,对这个C就进行了一个重置。那重置以后呢,我们再获取的是当月的第几天?实际上又是第五天了,对吧。因为你已经重置了嘛。你看这个又变成第五天了。哎,所以这个操作呢,叫做set time。啊,你可以理解成呢,我们说啊,就是使用指定的这个date。哎,重置一下咱们当前的这个calendar。这样的一个情况。你也可以理解成呢,就把这个data呢,相当于转化成了一个calendar一样啊类似的这样一个情况,好这呢,就咱们这个calendar的一个使用,说到这儿呢就足够了,整个呢,咱们把把JDK8之前的这一篇呢,咱就稍微的就过了一下,哎,大家能有一个印象就可以了。那我把它呢就到这。哎,其实讲这一篇呢,看着就稍微的有点无聊是吧,哎有个印象,然后下来的话呢,稍微的该测的也稍微的测一下。OK啊,后边我们在一些题目当中有需要了,能够用得上。
37:02
那接着话呢,我们来看看这个勾练习题,扣练习题的话呢,我们刚才不是提到这里边这个练习题了吗?来我们把这个练习呢,可以做一下,首先呢,看第一个说呢,如何将一个java.YouTube下的一个date转换为一个java.circle下来一个data实例。来我们这块呢,给他新建一个。啊,这呢就写成个单一测试方法了。诶粘到这儿。看一下。这个操作怎么做呢?也就是有这样一个场景啊,目前的话呢,我这写成是一个date,我叫DATA1啊new一个date。假设呢,我们就以当前这个时间为例了,此时这个date的话呢,我们是一个U下的date。啊,没问题,现在呢,我希望呢,你转化成是一个circle下的一个date,比如叫DATE2了。怎么做?怎么做啊?啊,对,有同学已经说出来了啊,你看我这样做行不行,我这先写个对的,一你这不是报错吗?
38:01
然后我alt回车一下,它会提示我们强转,我就强转一下。说这块我打印出来的这个DATA2呢,就是一个S加的data,这样行不行。啊,你看这个操作多快啊。哎,这样运行的话会有问题吧。报了一个class exception。能理解不?啊类转换异常是吧,为什么会报这个呀。对。有的同学呢,可能平时呢,这个道理都清楚,但是呢,一做这题目的时候呢,就有点儿迷糊了啊,你看这块你实打实的new呢,是不是就是一个负类的对象。呃,你把这个父类对象呢,转成这个子类的时候呢,它肯定这个编译时过不了,我们加了一个强转,问题是它本质上来讲就不是一个子类的对象是吧。所以咱们讲这个多肽的时候呢,你注意这个,我们把这个此类的这个实例哈,转换为或者叫声明一个父类的声明,这叫多肽。
39:03
然后呢,我们这个强转的时候呢,注意强转的话呢,你往下转的话呢,我可以还转成这个类型,因为你本身扭的就是这个子类的对象,所以我往下强转的时候呢,就可以转换成它。或者你说我要是往下转的话,我能转化成这个这个类呢,假如要A这个叫B的话,这个A类呢的对象呢,我们以多代方式呢,生命成不B了啊,然后这个B的这个变量,我们能不能把它呢强转成是A的这个负类,但负类呢还是B的子类啊。这个转可不可以?你看比如说这个A的话呢,是学生。Student,然后这个B的话呢,假设叫。然后呢,相当于我们用了一个student付给object,然后呢,这个呢是个person。那我把这个student以后呢,给这叫多肽了,然后呢,我强转的时候呢,这个是student,我能强成person吗。
40:07
可以吗?啊,你同学这迷糊了可以呀,这个为啥不可以呢?为啥不可以呢?你换句话说,我要是个student,我能付给person吗?可以啊,这不还是堕胎吗?对吧,就是你可以呢,往下强转的时候呢,你转成本身这个类型的,或者是这个类型的副类的吧。这都可以,但是你不能够再往下强转,你说我这块用的是个student,你非得给它转成一个,比如一个中学生。这是不是不行?因为你实打实用的不就是个student,你不能再转化成学生的词类了啊。这不行,但是你可以呢,转化成这个学生的副类。这个都是咱们多肽讲的这个场景。咱们项目里边不也做过类似的这种场景,你这块实际用的是一个架构师。架构师的话呢,咱们不是还把它当初付给这个employee过吗。
41:03
是不是就相当于你这个架构师这个此类的,就象把它付给employee了,咱们接着的话呢,你这个employee这个E,咱们不该E一下判断一下,判断的时候呢,咱们说你得先判断,因此都架构师你不能先写乘以二,因为写乘二不就进去了吗。当时都挺清楚的,现在就迷糊了。哎,架构师的话呢,属于程序员的这个子类,所以呢,E in成员的话呢,是不是肯定能进去啊。对呀,所以说呢,是不是你转换成负类可以啊。没问题啊。啊,这个基本上就是一边讲一边就忘了是吧。啊,回忆回忆啊好,那现在这个问题呢,是不是就用的是这个多肽,你实打实拗的就是一个负类的对象啊,你是不能够给它强整成这个子类对象的。换句话说呢,你如果要是强转成了,万一要是此类里边多一些属性,多一些方法,那你掉吧。你上哪钓啊?你又在,傅雷的对象你也没有啊?所以是不行的。所以说这样的写法呢,肯定是不对的啊。
42:00
注意,这是错误的。好,那应该怎么做呢?对这块我们要找它们两个这个有关联的一个地方是吧。这块我们发现了这个date的话呢,它有一个时间戳,然后呢,按照指定的那个时间戳呢,我们再造一个S加的date对象就可以了。这就他们二者之间的一种关联。所以说呢,这时候我们其实呢,实际上是想用这个date的话呢,它的这个构造器。哎,他不是这样写吗?然后这个位置呢,需要写一个毫秒数。这个毫秒数的话呢,咱们就用这个date的这个毫秒数呢,去充当。哎,这不就调我们这个方法吗。那此时的话呢,这个data就是我们想要的circle下来,Data说白了你不能强转,那就得自己造,然后找他们之间的这种。哎,关联的这种关系,那就是一个时间戳就可以了。哎,来,我们走一下。看看这个就没问题。啊,这个呢,是我们说的一个正确的一个做法,行这个完了以后呢,其实我们来看这个拓展。
43:08
哎,下来呢,大家把这个题呢,还都得写一写是吧,通过写这些题呢,你去熟悉下咱们这个知识点。这块这样说的说呢,从控制台呢,获取年月日啊,写了一个年一个月一个日,这呢注意是个字符串。说现在话呢,我们希望呢,把它保存在数据库里边,当然操作数据库呢,咱们也没讲,现在我们只做其中的一半操作,就是说咱们只要得到一个思下的一个date对象呢,就就算是可以了。哎,咱就认为呢,说这个事儿就做成了。啊,所以这块呢,我们需要做的事呢,需要呢,你把这个字符串。转换为是circle下的。Data。啊,这个看怎么弄啊。对,这块这个字符串的话呢,咱们讲过这个simple data form了,可以先把这个字符串呢,转化成java.YouTube下的data,然后呢,他在转化成circle下的data,这个事咱们刚才讲了这个事儿的话呢。
44:06
叫做。格式化还是叫解析来着?嗯,这个叫解析。啊叫解析啊,你看我们拿过来咱们,诶这样往上走,现在呢,相当于你想把这个字符串呢,转换成是一个日期了,所以这个叫解析。有同学说,哎呀,这个还挺麻烦,有人记,记串了,你咋记呢?不用记。哎,要我的话我就不记了,哎是因为我用的多了,我就记住了,那怎么办呢?就是你假设呢,现在要转了,你知道呢,用这个类里边的方法格式化呢,这个单词你记一记叫format解析的单词呢,叫pass。你说我现在是谁转谁,然后呢,字符串转日期,我记不住是叫格式化,就要解析了,你就先假装是格式化,诶写格式化的时候,你发现了他要传一个日期,你说这不对,我现在是有的是个字符串,那就用解析呗。是这个不行的,就用这个,反正就这俩是吧。啊,当然你写多了以后呢,你就记住了啊。
45:01
好,这块的话呢,我们是字符串转日期的,实际上呢,是一个解析的操作。行解析操作,那就差不多就成了,其实这个事儿,所以呢,我们用GD8之前的API做的话呢,就首先。As simple。带我妹。哎,然后你又一个。I simple。Data form是吧?嗯,这块的话呢,你得指定个格式了吧。因为你这个字符串咱就不从键盘获取了啊,我就直接在这块写上一个,比如说叫pattern。啊,这块的话呢,就是叫这个,比如说。是吧,那就这样啊,Patternon啊这个。就它了,然后呢,这块呢,根据你给的这个字符串,我去填它的这个格式,对,所以呢,就是诶四个Y。然后呢,这个。大的M是吧。哎,大的美眉,然后呢,两个DD啊就可以了啊,这个一定得写成大写的啊好,这个完了以后呢,我们有了它了,接着呢,SDF点我们调了一个pass操作,把这个pattern给它放进去。
46:06
他呢,有可能说写的不太靠谱,那这块你就抛个异常,然后这块我们就接收,注意这块接收到的呢,是一个U下的data。这呢,我们写啊得到。哎,U对下这个date了,好,那么接着的话呢,我们再把它转换为。哎,下的一个data就可以了,这个我们上面不已经讲过了吗。所以呢,就是哎,Circle下的一个date。哎,搜下的一个data啊,然后这块你把这个date一点get一个time,诶这块呢就可以了,然后这呢,我们就打印一下看是不是就行。来,我们走起。诶,你看这时候呢,这个时间是一样的啊,当然你看到这个呢,其实你看到这其实还是个字符串,因为呢,它这块相当于掉这个图string了是吧。哎,当然呢,其实它对应的这个date呢,就是我们说的这个靠谱的这个情况啊。
47:03
嗯,没啥问题,这个呢,就咱们这个题,那以后呢,如果我们在操作数据库的时候呢,有这个需求了,咱们就可以这样用。啊,其实啊,咱们真要讲到这个数据库的时候呢,可能还没这样写。为啥呢?因为呢,你可以直接拿这个字符串呢,去往这里边儿放。呃,数据库这块呢,它竟然能够把你这个字符串呢,自动的转化成是一个date了。只要呢,你写的这个格式呢,靠谱就行。你看现在我这样写的,跟这个数据库,你看默认识别的这个是不是匹配啊。只要匹配的话呢,数据库这块,它会自动的把这个字符串呢,就转化成是一个date了。啊,它有一个隐式转换。啊,其实呢,也就是说呢,我们还真不用呢,你实打实这样去匹配了,但是讲这个知识点作用是什么呢?就是如果呢,你要是把这个数据呢,想转换到我们Java层面的话,那你得对应的你知道是circleco下的那个date。这儿呢,还是需要用到这个知识点啊。
48:00
好,这是咱们说这个课后练习题。
我来说两句