00:00
好,那么接下来话呢,咱们看一看这个GD个吧,里边新增的这个日期时间的API,诶,那首先的话呢,我们看一看这个PPT哈,诶不是看下我们这个课件这块,我们先说一下为什么这块我们要引入新的日期时间的API,哎,这块前面有一个说明。现在如果我们跟别人说,我们在这个啊。啊,相当于一个数是吧,见面啊,别晚了,但是呢,其实就是我们所指定的一个毫秒数,或者说呢,叫做时间戳,呃,所以这样的话呢,我们就不会出现什么歧义了啊,当然呢,实际情况呢,我们在相关的一些项目当中,或者平时生活当中啊,咱们希望这个时间呢,它跟这个昼夜刺激是吧,都有关系啊,那这时候呢,就使得我们这个时间的设计啊就比较复杂。应该说呢,从这个JDK这个相关的版本迭代上来看,对于时间这块的变化呢,确实还是比较大的,你像这个date的话呢,我们在1.0这个版本当中引入的1.1的时候呢,就把它这里边好多API呢,就给它depreated了,一直到现在还还都留着呢,是吧,然后呢,我们就替换成这个calendar了,但是calendar的话呢,本身呢,也会存在一些问题。
01:04
所以呢,导致我们现在的话呢,在GD8当中,呃,想彻底的把这个事儿呢给解决一下,在八这个版本当中就引入了新的日期时间的API了。啊,那引入这块的话,我们首先得看一看这个calend也好,这个data也好,有什么问题。啊,这里边儿呢,你看提到一些这种场景啊,提到了有这样的四个事儿啊,这四个事儿的话呢,有一些我们实际上是可以通过代码呢来给大家去演示的啊,那这块呢,我们不妨呢,就一边演示啊,一边说这里边这个问题,这呢是我们GT8里边儿这个啊新的日期时间API的一个说明。那我们就放这儿了啊,首先的话呢,我们来说一下这个之前那个API呢,它存在的这样的几个问题。哎,这儿呢,有写第一个的话呢,叫做可变性。什么叫可变性呢?说像日期时间这样的类呢,应该是不可变的才对。啊,那这个可变啊,不可变啊,其实跟咱们讲这个string的话呢,也是类似的这个场景,诶咱们先以string呢来稍微的再回顾一下,比如说这个位置呢,我们叫做哈了,然后这个S1的话呢,我们调一个replace的方法,诶咱们当然也演示过,把这个L呢给它切换成是一个W,这个替换操作呢,是你返回的这个字误串。
02:15
我们叫S2,它呢是你替换好以后的字串,而我们这个S1。他仍然是哈。哎,我们把这种特性呢,其实就称为呢,叫做string的不可变性。啊,也就是说呢,我们修改的话呢,你去修改你得到的这个结果,而对于我们这个字符串本身的不要改,因为有可能其他一些场景呢,还要用这个字符串的。啊,所以是这样一个场景,而我们现在提到了说像日期时间API呢,应该是不可变的,言外G呢,就我们之前使用的data也好,C也好,它就是可变的场景啊,那这时候我们看一看咱们讲的这个JD8之前的,比如说呢,提到这个calendar。啊,它呢确实就如此了,比如说但是你看我们的这个位置啊,我们呢,把当前这个啊,这个月的第几天改成23了,改完以后呢,这个set咱们在讲的时候呢,我还特意让大家看了一下,它是个word,就是他没有返回任何的calend这个实例。
03:10
而且呢,我们再去拿这个唯一的这个开战的这个实力呢,去调盖的时候呢,发现他真的给改了。杨爱呢,他就把我们的看本身的这个,呃,这个月的第几天给修改了,这就相当于他就是一个可变的嘛。啊,这呢,我们把它呢拿过来,这个呢,就来体会一下它这个所谓的这个可变性。哎,CTRL一下。是吧,哎,这呢就是来去体会。哎,体会我们这个叫哎calendar。它的这个叫可变性。那这块呢,相当于你修改完以后的话呢,直接就把你当前这开这个实例呢给改掉了啊包括呢,我们后边这块提到了,你再去做一个艾特也好是吧,艾特完以后的话呢,发现也给改了,这呢就叫做可变性最好呢,怎么着呢,你在这块调完一个方法之后,你想改成某一天,你在这个返回值是一个你修改以后的,而这个本身的看着呢,最好不要动。
04:05
那就相当于呢,想让它呢是不可变的,那这个呢,你就得用新的API呢才能体会了啊第二个点说这个date当中的这个年份啊,它是从1900开始的,相当于它有一个先移量。这个咱们在以前呢,演示这个注解的时候呢,给大家呢说过这个事儿。你看这个day的话呢,我们去new一个day的时候呢,它呢有很多的这个构造器,CTRLP一下,其中有一个呢,就可以放ear length和这个D,但是这块放的时候呢,你发现呢,跟我们想的呢,可能不太一样了。比如这个位置呢,我就写2022年的,咱们写个12月,假设呢,我就写个哎14号吧,哎,你以为呢,咱们写的是哎2022年12月14号,但其实呢,你写的根本不是这一天。所以这块我们看date一下呢,我们去做一个run。嗯,这个我们是run的不对是吧,Run的这个啊。你看这块啊,说这个呢,三九啊,你看这个又成了什么January了是吧。
05:04
那这块其实还有个问题,我这写的12 12咱们最好呢,写一个11吧。就是不管年份这块有便宜量这个ma这块也有。你看嗯,这个2022,然后加上1900,这不就是3922年嘛,这个我写的是11,你以为是11月14号,但其实呢,这个11呢,它是12月。比如说这个月份的话呢,你写个零的时候呢,表示的是一月份。他这也有个偏移啊,然后那个D呢是14啊,这块倒是没有偏移了。啊,那这块就是我们所谓这个叫偏移量啊,偏移性,你得注意到这个偏移才可以了,所以你这点这个date的时候呢,上面这不也说了,你如果真的想表示2022年,你这是写这个的时候呢,咱们让他后边减去一个1900是吧。才可以啊,因为它默认这块呢,这不有这样的一个价值吗。而且这个你看这也写了,是不是从零到11嘛。哎,这样个情况啊,好这块呢,我们就得注意这个事儿呢,我们称为呢,就是这个偏移性啊,有这样一个问题。
06:02
啊OK好,然后下边这个呢,提到叫格式化,格式化呢就我们使用的这个simple data o。诶,第一代的话呢,这个日期时间API呢,叫做date,然后后边呢,很多呢,已经被calendar呢给替换了,但是我们这个SIM data format格式化解析的时候呢,咱们只能够对data有效。啊,这个calendar呢,又不能用。那这就很尴尬了啊,你又不建议用它,建议用它,但是它呢又不能格式化。啊,就有这样的问题,说此外的话呢,他们也不是线程安全的,不能够处理闰秒。哎,这个闰秒呢,它是一个概念,这个呢,说白了就是咱们这个地球的这个运转啊,其实也不是完全有规律性的是吧。呃,它呢,可能会有一些这个呃,潮汐的影响啊等等的呀,那适当的在某一个时刻的时候,我们得稍微的调整一下,比如说往前拨上一点时间,或者往后拨一点时间,那这个呢,我们就需要做一个处理,那这种就是理解为呢叫闰秒的意思。这个呢,不是以前有这个舆论是吧,有提到这地球,地球上不是都自转吗?呃,这个月亮的话呢,其实它的这个运转呢,可能会导致这个潮汐的变化,可能导致地球呢,会有微微的一点,这个有。
07:11
不是那么规则了是吧,然后还有人提到说中国这块不是咱们好多年前建的那个三峡大坝是吧。诶,然后呢,这块不是拦着个水吗。发电的是吧,呃,然后呢,说中国建了三峡大坝以后呢,导致地球这个自转呢,都受影响了。啊,这个就有点儿扯了是吧,或者管他影响不影响,反正我们就见了能咋地是吧。嗯,OK啊,呃,其实这块我们说呢,呃,像这种啊,咱们说这个地球自转也好,公转也好,这个其实都是,呃,它是有一个自行的一个规律的,但是我们呢,非得给它,呃归结为比如说就是365天,360天一天24小时,这个其实都是咱们人自己给它又后建出来的是吧。啊,就包括这个地球呢,咱们买个地球仪上面还有这个经线纬度,那其实根本就没有精度纬度之说啊,就是咱们人呢,给他又规范出来的一些这个一个东西是吧,所以规范出来呢,不是天然存在的呢,那可能它会有一些偏差啊OK。
08:06
好,总之的话呢,就是对日期时间的操作呢,一直是Java成员最痛苦的地方之一是吧。啊,其实呢,就是比较痛苦了,诶,所以这块呢,我们为了引入啊,为了呢解决上面这些问题啊,引入了新的日期时间的API。啊,就是这样一个道理,那其实一开始的话呢,这个日期时间API新的呢,也不是我们扎二八里边的啊,其实呢,是第三方的API,然后后来发现呢,很多成员呢,都开始不用这个JDK自带这个了,都开始用第三方的了,然后扎瓦一看说这不行啊。啊,这也是核心的一篇,那这块呢,我就。哎,借用一下得了是吧,诶抄一抄,然后把它就放到核心的API里了啊,那么在扎阿巴呢,这个版本当中引入的。好,那么引入呢,对应的这个包呢,就是这样的几个包,java.time啊,这个这个这个这个这个。啊,大家呢,在这个API里边呢,其实也能看得到啊,这个你往前翻的时候。
09:00
啊,回到这儿表示下这个base,哎,往下找啊,这块呢,跟time相关的,哎这不有这么几个吗。这个呢,就是咱们GK8里边儿新增的日期时间的API。啊,这个呢,你要打开去看的话呢,涉及到的API呢,其实还挺多的啊,啊得60多个呢,但是实际上呢,我们开发中要用的话呢,只会用到比较基础的一些API了啊,因为咱们也不是需要处理的这个那么丰富了啊,除非呢,比如说像我们写一个像这种携程啊。是吧,哎,这个还还有什么其他的一些旅游性的一些网站,比如买机票啊等等的,它可能涉及到全球各个市区的是吧,比较复杂的这种场景,我们才会用到比较多的这种,呃,日期时间API,诶,否则的话呢,这块我们国内的几个项目,咱就是国内用的。啊,就是你们市里边的一个啊,项目用的你根本你也不需要多国际化嘛,所以呢,就用不着那么丰富的日期时间的一篇。啊,就这个道理啊,所以这块我们在讲的时候呢,咱们也有,也就呢,相应的简化一点来看,核心的一些API呢,主要是哪几个,那首先呢,我们要说的第一波这块呢,涉及到有三个,Local date local time local daytime。
10:07
啊,所以你一看的话就知道,这就专门的是日期的啊,像年月日这个呢,就专门的时间的,比如十分秒这个呢,就是日期和时间的。啊,年月日和时分秒,所以呢,首先呢,我们看一下这三个类。这三个类的话呢,第一个问题就涉及到如何呢去造对象了,这呢有两种方式啊,就是对应的是这两种方式,所以呢,我们就先把这个呢,可以先演示的说一下。好过过来拉到这儿,哎,咱们下边呢来说一下。哎,JDK8它的这个。呃,API啊,首先呢,我们要说的这个叫哎local data。At local time。Local date time。对,就这样的。行,首先的话呢,就涉及到这个造对象的问题了,这个造对象的话呢,我们这儿呢,提供了两种方式,这个闹呢,其实你能够想到就是获取咱们当前的啊日期,当前的时间,或者当前的日期和时间啊,这呢是静态的方法,所以呢,你比如说啊,我就想获取获取一下当前的日期的,那就local date点闹一下。
11:17
那这样呢就可以了。这呢,我们就比如就叫local data吧,咱们先直观的感受一下这三个类啊,然后呢,还有一个呢,叫local time。啊,这呢,我们也来一个now。这叫local time,好,再接啊,Date time。弄一下。哎,就这么着好,这样的话呢,我们就得到三个对象,这三个对象呢,咱们最直观的就是直接打印它看一下这个结果。啊,这个我们就直接复制了。第一个写错了啊。哎,这么着一下好直接呢,我们这块呢,Run一下。
12:02
哎,这就可以了,哎这块我们看到的就是,哎,这是年月日,这个呢是十分秒,后边呢,这算是474的这个毫秒是吧。然后这块呢,就是年月日配上一个十分表。啊,没问题,行,这个呢,就是我们最直观的对这三个类呢熟悉一下。哎,自然而然的,我们看到呢,它也是获取的,咱们当前的这个时间。哎,这块我写一下啊,这个我们叫哎获取当前时间。啊,或者叫当前日期和时间啊,对应的这个对象,或者叫对应的这个实例了,好,然后下边这个of呢,就是你想获取指定的就是年月日啊,十分秒啊是吧,这样的这个场景了。行,这是这个of,比如说咱们要local,哎,这个把它就去了啊,比如这个local date,那它这块你去of的话呢,它就只有这个年日这块去考虑了,比如我们写一个叫呃2021年吧,比我们写一个这个呃五月啊23号这块呢,我们可能会担心,诶他有没有所谓的这个偏移量之数呢,注意这时候就没有了。
13:05
哎,这块我们out加一个回车生成一个啊local date1。啊,这有它好,我们再写一个比较长的啊local daytime第二这个呢,既有日期又有时间,所以这块of的话呢,它就比较长一些了,比如2022年的12月啊,五号的这个啊。11点。啊,11:23啊,45秒啊,就这样个情况。然后呢,再来个回车。哎,这样。好,这块我们把它呢,分别呢做一个打印。哎,就这么着了,好它呢就没有这个偏移量了,所以呢,我们这块填的是哪一天,那就是哪一天。你看这个呢,我们填的是2021年的5月23号,那就是这个时间下边2022年的啊,12月5号11:23:45就是它。这个呢,就跟上面呢,我们说呢,GB8之前的这个移这个就不一样了。啊,没问题啊行,这个呢,就是我们相当于要获取指定的啊日期这个时间的。
14:06
啊,这个,哎。时间或者叫对应的是吧,这个实例。这就可以了,我这就没有举这个叫local time了啊,Local time调O的话呢,就只有十分秒。哎,就可以了,行,这个呢就相当于是在造对象啊,到对象呢,这块我们提到了有这样的两个方法,这个完了以后呢,它也有其他的一些方法,这个方法呢,我们来看一下,下边有这样一些,首先呢是一些get行为。啊盖的就相当于是获取,比如说你这个月的第几天呀,这一年的第几天呀,这一周的第几天获取是这个暂啊然后这儿呢是他然后这个呢是获取月份的这个数,它是以一个in的形值的方式呢去呈现的。啊,这个呢,相当于它不是一个值的方式的,它应该是呈现出来了,比如说就是呃,January啊等等是吧,这样的方式去呈现的了。好,那这个呢,就获取这个十分秒等等啊这一波呢,想体现呢,其实就是获取一些相关的属性的情况,然后下边呢,有一系列的这个叫with。
15:05
位子呢,其实就相当于是一个什么呀。设置。啊,然后下边这个plus呢。就是添加这个mini呢。就是减少。哎,其实这块大家要看的话呢,我们现在讲的这三个类,Local date local time local date有点像呢,咱们JDK8之前讲的哪一个来着。啊,这个有点像get,这有点像sat,这有点像加,这还可以减。对,咱们是不是讲这个calendar的时候。说了说了几个方法是吧,它呢可以get,可以set。啊,然后呢,可以这个I的是吧,只不过呢,它这个A的话呢,你写个负的就是减了,它这块呢,加和减分开了。哎,就这个场景行,简单的我们稍微的演示一下啊,你比如说这块咱们就拿呃,当前的这个local daytime,以它为例来说。好,或者这块呢,咱们就再重新的再再造个也行啊,就不往上看了,这个我们来一个二,以它为例。
16:05
它诶CTRLC第二,诶我们这块呢,去get一下,比如呢,是这个月的第几天。咱就直接打印了。走起。哎,这个月的第五天啊,没问题,好这个呢,就相当于是我们这个叫get啊相关的这个操作了。啊,这是它,然后这个呢,设置的话啊,我们看还拿着它。哎,第二我们这叫with是吧呢,叫day,我把它设置成这个月的第几天,比如设置成这个第15号,这个呢,你看我们设置完以后的话呢,我们加上一个回车,它还会返回一个local daytime的这样一个实例。然后我们此时呢,比较感兴趣就是当前这个local daytime2它呢会是多少。是吧,就是它到底变没变。走一下。行来看一下啊,我们呢是改成15号了,你发现了它还是五号,然后呢,你返回的这个结果是15号。
17:06
哎,这呢,其实就体现了咱们所说的这个叫是不是不可变形啊。对啊。那也就是说呢,你想改的话呢,你反馈的结果是你改以后的,而我们这个对象呢,就不要动,为啥呢?呃,因为有可能我们在上面一些代码当中,你把这个对象呢,传给以参数的方式呢,传给某一个方法了,然后呢,你把某一个时间呢,就用它来设置的,你这块一改,人家那块本来不想改,你这一改是不是跟着那个也改了。不太合适是吧,诶所以呢,最好呢是不可变的。OK。来,我们把这个CTRLC。这个放到这儿。诶,然后下边这个,诶CTRLC这个我们放到这儿好,这个呢,相应的呢,就是我们说的这个叫诶with这个操作。有点像我们calendar里边那个set那个操作一样。好,然后基于它呢,我们再来一个啊DAY2,它这个呢,可以去做这个叫这个操作,比如说我们加上。
18:05
嗯,加上几天吧。嗯,Plus day吧,啊,这边我们来一个五。然后呢,我们再去alt加回车,那又会生成一个对象。相当呢,在我们目前呢,是五号的基础上呢,我又加了五天。啊,然后打印一下这个结果,那你也能想到本身的这个logo day2呢,是不是也不会变。对,你反回来的结果呢,它才会变。来,我们再走。行,然后这块看是不是本身呢,也没变嘛。然后你反过来结果的话呢,变成这个十号了。这个呢,也是体现了一要不可变形。这个呢,我们叫做这个plus,然后叉叉叉。这就不多说了啊,然后这个叫加,然后现在你要是减的话呢,这块有这个叫miniin是吧,这个我就不演示了,还包括呢,就判断说你当前这一年是不是一个闰年是吧,这有这样的一些方法,行,这就过了啊,整个来看的话呢,大家可以这样去理解,哎,我就稍微的写到这儿吧,咱们此时呢,讲的是这样的三个类啊,这三个类的话呢,我们说呢。
19:07
呃,大家可以呢,就类似的去理解。咱们的calendar是吧。哎,有点像他了,然后这里边呢,主要大家可能需要关注的呢,第一个呢,就是这个实例化哈,我们提到了第一个呢是用no,第二呢是用这个of啊里边相关的有这种哎参数你去填就可以了,哎然后接下来的话呢,涉及到了一些方法。哎,方法这块的话呢,我们看到有相关的这种get这个方法是吧,就简写了啊,然后还有呢,这个叫哎这样的这个方法,然后呢,还有我们刚才看的叫plus是吧。诶这样的,然后还有这个叫mines是吧,诶相关的这种操作行,这个大家了解一下啊,需要用的话呢,你直接过来呢去取就行,一般的话呢,我们可能要是用的话呢,用这个还是更多一点。你把那当前的一个时间,或者指定的一个年限日,或者十分秒设置到某一个属性的位置就可以了。好,这是他们仨的使用,然后下边这个呢,叫instant。
20:03
这个翻译过来呢,叫做瞬时。啊,瞬时实际上呢,它就相当于表示的就是咱们某一个具体的一个时间戳了啊回过来。这个呢,我们直接来看一看。哎,这个啊,Instant啊,它呢表示时间线上的一个瞬时点啊,用来记录应用程序中事件的一个时间戳。啊,这个时间戳呢,咱们前面已经说过了,就是距离1970年1月1号00:00:00到现在的一个毫秒数,这个我们就称为呢是一个时间戳。啊,那我们创建它的一个实例,其实就对应着一个毫秒数。啊,这个时间戳呢,咱们前面也没有特意的去提,说在什么样的场景下呢,我们会去用是吧。哎,首先的话呢,它可以指定一个具体的时间。这个呢,你在需要的地方呢,去指明这是没毛病的,另外的话呢,这个时间说还可以有一个用处。啊,你比如说大家呢,买东西的时候呢,咱们是不是都会有一个叫订单号啊。这个订单号的话呢,一定是唯一的吧。
21:03
这个唯一的话呢,你可以理解成就是叫全球唯一了,比如我们在这个淘宝上啊,你买了个东西,这个订单号,只要呢,你说一下这个订单号。一定不会出现重复的。啊,所以呢,一般呢,你要是买个东西呢,有问题了,你找这个客服的时候呢,他一般首先呢,会问你说你把订单号发过来是吧,他一看到这个订单号的话呢,一查就知道呢是,诶从哪买的商家是谁,诶这个邮递给你,你的一些信息,包括这个商品的详细信息都能够看得到。诶,所以呢,它是一个唯一的,那么这个唯一性我们怎么去保证呢。是吧?你想这个时候呢,这个订单号要保证唯一性哈。全球唯一性,比如说这个双11的时候,就在这个00:00:00的时候呢,可能说几秒钟之内啊,以前的时候呢,双11都公布这个数据,可能诶几分钟之内啊,或者十分钟之内啊,下单量呢,就达到多少个亿了是吧,那可能这个一秒当中是不是就有很多的这个量就上来了。
22:05
这就是这个叫高并发的场景吧。啊,那这时候呢,它每一个商品你要购买的话,都会生成一个订单号,这个订单号的话呢,你像如果我们用时间戳来表示,只能够精确到毫秒是吧。到这个级别呢,是不是还不够啊?对,所以说我们直观的想象的话,诶,我就用时间抽呢去表示个订单号,但是呢,对于你自己来讲,你基本上你不可能在一个毫秒单位内的,你下两个单,那肯定做不到,但是对于这个平台来讲的话呢,是极有可能出现的了,所以呢,在时间戳的基础之上呢,我们还得再加点儿东西是吧。啊对,加的东西的话呢,这就是不同的场景设计的不一样了,比如我们可以再加上一个随机生成的啊,以后我们会讲叫UUID啊,随机给我们生成一个字符串啊,那个字符串的话呢,它这个有这个十几位呢是吧,然后再拼上你这个时间戳在这个毫秒这个竖的这个范围内呢,再拼上一个呃,位数挺长的一个没有规律的一个字串,其实呢,就基本上保证它的唯一性了,是吧。
23:03
哎,可以这样一个场景啊。好,这儿呢,就是我们说的这个事儿,当然呢,这个事儿的话,我们在设计的时候呢,其实还有其他的一些考虑啊,比如呢,这个订单呢,我们在数据库中去存的时候呢,尽量呢,还得让它是有一个序列啊,有序的一个状态。啊,这一说呢就多了哈,嗯,这块呢就呃以后呢,在讲到优化的时候呢,我们再提这样的问题。行,目前的话呢,我们知道呢,这个时间戳它可以呢,考虑作为这个订单里边这个订单号的一部分出现啊。嗯,然后的话呢,下边就是关于它的一个具体的实例化和常用方法的一个使用了,那这个in森哈,其实呢,就类似于咱们讲的这八之前的那个date啊。哎,下边我们来看看他这里边儿提到的几个方法的一个使用,哎,就这几个啊。好,我来啊,在这我先写上吧。它呢叫类似于大家呢,就去想这个date就可以了。行,那我们这块呢,来去测试一下。
24:03
这个咱们把这个再粘一下啊。啊,Instant。那这个该四了啊。行,那么首先的话呢,我们去创建这个对象,创建对象的话呢,这块也有一个nor,那也有表示咱们当前这个时间,所以in.nor。哎,我们就这样呢,去创建一个啊,Alt加个回车。哎,这就是一个in instant,好,我们这块呢,去打印一下这个instant。走起。好出来了啊,它默认呢,显示这个格式的话呢,诶跟我们想象的也差不太多啊,就是年月日十分秒是吧,后边配一个这个。毫秒啊,就这样个场景,这块呢,打印出来的,哎,你看一看啊。好,现在不是咱们当前那个时间。12月5号七点多是吧。哎,那你看一下跟我们现在这个时间差多少。
25:01
是不是正好差八个小时啊?诶,所以呢,这块得到呢,其实就是我们所谓的叫这个格林威治那个中央的那个时间是吧。嗯,这个我这儿是不是画了个图,实际上他得到的是不是伦敦这个时间。距离咱们这个时间段还有八个时区啊。所以它这个毫秒数,你注意它衡量的其实就是以它为这个基准点来算出来的这个毫秒数。啊,1970年00:00:00,人家也是以这个为单位来算的啊。这实际上伦敦一开始这个工业革命的时候呢,以它为起始点来的是吧,咱那时候叫天朝。那那不行是吧。嗯,对,哎,不是以这为重点的啊好,那这块的话呢,咱们要想得到咱们当前这个时间,这个大家做一个了解就行啊。怎么办呢?我拿着这个instant。加八,这这怎么加八,第二他这块应该有个这个方法叫at of set。哎,这个offset呢,它翻译过来就是一个偏移量的意思了。哎,我们呢,这不是在时区上这块是吧,它这不有个zone,呃,Offset,然后呢,我们有一个of hours差八个小时嘛。
26:05
哎,就这个意思。当然这个呢,大家不用去掌握啊,咱做一个了解就行,这个比如我叫啊。这个是。哎,一吧。哎,他这块呢,其实对应的这个时间呢,就是我们现在想要的这样的一个时间了。哎,这个我们再做一个run。哎,你看这时候呢,就是我们下午的这个三点多是吧,没问题啊,行,这边一个家就东八区嘛,OK。行,这个呢,大家做一个了解就行啊,这个你不用去多关注了。嗯,然后的话呢,我们这儿呢,是其中啊获取到的就是咱们当前的这个时间啊,用的是这个闹了,那我们还可以怎么办呢,还可以获取一个指定的,指定的话呢,这块要填的就是毫秒数,那毫秒数的话呢,咱们就可以呢自己整一个啊,比如说in instant点。这个我们叫O啊epoch mill这里边呢,就假如我就随便写了一个哈。
27:00
写个浪性的一个值,然后呢,就是以这个毫秒数为代表的这个年月日十分秒。Out,加一个回车。那就这样。In instant2啊,那这个对应的是哪一天,这个咱们随便来的哈,你看看。啊,这个呢,是1970年的啊,11月7号是吧,这样一个时间。哎,你看这个呢,跟咱们说的那个date是不是有点像。这里不也是有一个new,一个date,然后里边放一个毫秒数的吗?然后呢,你要用空三的构造器呢,它不就是当前那个时间的。有点像啊,然后咱们讲这个D的话呢,有个方法叫get time。啊,获取咱们当前这个毫秒数在这儿呢,他用的是这个啊TO1PO mill。诶,比如说咱们拿这个instant以它为例吧,它呢我们去调这个叫to po mini这块呢,它得到的其实就是一个毫秒数。浪型的一个叫me。Time。打印一下这个mini。顺便的话呢,咱们还可以再看一下,你比如说跟我这样写的啊,我new一个date。
28:05
U下的data,然后呢,我再去给他呢,也盖了一个time,哎,你看这不也是个好描述吗?你看这两个这个时间其实呢,基本上就是基本上是一致的啊,你直行这块跟直行这块中间不是有个差差值吗。啊,稍微差一点这个毫秒数是吧,哎,你看整体上这个格式一样,就是毫秒数。行,所以呢,从这个角度来看的话呢,确实这个instant的话呢,跟咱们说的那个date呢,是有点儿像的。啊,这儿呢,对应的是咱们date的空三构造器,这个呢,对应的是咱们date代参的构造器,它这个呢,就是获取毫秒数,咱们data里边呢叫get。哎,就这样行,哎这块呢就过了啊,哎这对应的这个实例化。哎,两个方法是吧,一个呢叫一个呢叫from。诶of啊OF1泡这个呢不太好记,你也不用刻意的去记它,你直接呢就点一下掉就行啊。
29:02
好,然后对应的这个方法这块。放这块你就知道呢,我们能够获取它的毫秒数就行,这个呢是这个。哎,这就可以了,好,最后这块呢,叫daytime这个你看他长的你就知道跟谁像。类似于是不是叫simple date format?啊,他那你看也是一个叫form,所以呢,也是用于格式化和解析的啊以前的话呢,我们这个SIM data form呢,它针对的是date来进行格式化解析的,而这个daytime呢,它呢,就是针对于我们这里边的这三个。进行格式化和解析的了。啊行,哎这呢,我们再说一下啊,说用于格式化和解析这三个结构。哎,这样就行了,好,那么具体该如何去解析呢?我们看下这个API了。找到这个位置。它这个结构的话呢,它给的样式啊挺多的,前两种的话呢,咱们就不说了啊,叫预定义的标准格式,就是你可以呢,让它用指定的这种格式呢去显示,显示出来的话呢,就是。
30:10
就是指定的某种格式了啊,然后你也可以用本地化相关的啊,Localized的这个date里边呢,放相应的这个啊,有这种全的呀,长的呀,中间的呀,短的呀,就是它呈现出来这个效果呢,都不一样,这两种的话呢,我就不演示了,相关的这个代码呢,我在下边这个T1里边,T2里边我这都有写,你要愿意看的话,你把它粘出来自己跑一下就行啊。好,那我们其实开发中要用的都是咱们自定义的一种格式,就是我希望呢,它是按照某种方式来显示的啊,那这块呢,用的是这种方式,这种方式呢,咱们要关注一下。啊,所以这块我们把它呢,CTRLCL一下粘过来。回到这儿。这个test。哎,改五了吧。啊,没问题啊。主要呢,我们想演示的。
31:00
哎,就是这个的使用。上面这块我们也稍微的写一下啊,CTRLC。Date time。好,那我们这块呢,就直接呢来整了。啊,首先呢,就是date time。那就它啊,第二这个呢,叫of pattern是吧,我们用的是这种自定义的方式的,在这里边呢,基本上跟咱们前面讲的是一样的啊,那四个Y呢,就是年月呢,就是大写的大美眉是吧。诶Z2个D啊,然后呢,十分秒啊,这个H的话呢,仍然是小写大写呢,就是十二进制还是24进制的一个区别了啊知识的区别好,然后呢,接着呢,Out加一个回车,咱们就得到一个datetime了。下边的话呢,我们要做这个格式化。格式化呢,刚才我们提到了,就是把一个日期或者是这个时间是吧。转换为字符串。
32:00
就这个过程,我现在这边写的呢,是包括了日期和时间了,所以呢,咱们此时呢,这个datatime form呢,我去做这个form的时候呢,里边我传的话呢,我就传一个。日期和时间的了,比如说这个local daytime是吧,它不有个方法叫now吗?所以我们就得到一个这样的一个对象,然后把这个对象呢,CTRLC啊,我们扔进去,这不就可以了吗?没问题是吧,好,然后这块呢,Alt加个回车,这不就得到一个字符串吗。哎,这就行了,好,我们打印一下当前这个字符串。这个呢,就按照咱们指定的这种格式呢去显示的。嗯,没问题是吧,这就这个四的话呢,因为咱们这写的是不是一个小写的。那那我要改成这个大写的。对,这块我们再跑一下。对,这就变成这个16了。嗯,行没问题啊好,这个呢,就是我们说的这个叫格式化的问题,然后接着反过来叫做这个解析嘛,解析呢就是它的一个逆过程。
33:08
诶转换为咱们这个日期和这个时间是吧,好,那这块我们就来操作了啊,诶拿着这个daytime form。诶粘过来这块呢,你小心一点啊,咱们现在呢,得到这个字符串的格式呢,是长这样子的,那我们现在呢,只能够解析长这样的一个格式的字符串。你不能整别的格式,你说把十分表写前边,年月日写后边,那那识别不了了就。当然这里边儿呢,你像这个事儿哈,如果在这个位置呢,我们改成这个斜线其实也行。啊,这个改成斜线,其实你打印出来的就是也是斜线了。啊,这个小细节啊好,然后呢,这个位置呢,我们再去做解析,这个叫pass了。Pass这块的。Pass这块的话呢,我们就啊。把咱们上边的,比如说以它为例吧,啊这个呢,我们就给它放进去。哎,就这样,然后呢,他就会拿着这个字符串呢,跟本身的这个格式呢,去做这个匹配,然后把它转化成对应的一个,诶时间。
34:04
啊,这样的一个格式,行这块我们alt加个回车。啊,这样啊,这块你会发现,诶怎么得到的是这个结构是吧,这个的话呢,它其实是一个接口。啊,CTRL加个H啊,这个是个接口,这个接口的话呢,它其实被我们这个日期时间的这个API呢,他们给实现了。啊,这个我们看这呢,不清楚了,你看一下这个位置吧。嗯,Control shift u。诶,错了。嗯,Control out you是吧?这就出来了啊,这个U的话,就是我们显示这个ul这样的一个关系图了,诶local daytime我们想找的是不是这个。哎,这不是刚才我们看到这里边儿的这个结构,就它嘛,相当于我们当年这个类呢,它实现了这个接口了。所以这块它的返回值呢,它就用这个接口来替代了啊,那如果呢,我们想把这个接口呢,给大家再转化成咱们当前的这个local daytime的话呢,你可以用一下它呢有一个。Local day有个的一个方法,这就转化过来了。
35:03
哎,所以呢,回过来啊,可以这样。啊,Local daytime第二有一个from。这个呢,你把咱们上面的这个。CTRLC给它扔进去是吧,然后此时呢,我们再al加回车,是不是就得到一个local daytime的一个实例了。好,这会我们再去打印一下啊local daytime1诶,那就把它呢又给它还原了。那比如这块我们改一下,改成这个15是吧。哎,那这时候得到的其实就是三点多的这个数据了。那这不就这个了吗。OK啊行,这个呢,就是一个解析的操作,这里边涉及到这个,呃,几个符号啊,这个你可以呢,看咱们上面讲的SIM data format或者的话呢,你直接在这块呢,重新去输入一下,点进来这块呢,人家有说明。啊,这是在这儿吗?哎,我们可选的呢,其实都是这里边儿的。OK。好,那么至此的话呢,咱们就把诶Java吧,里边这个日期时间API呢,我们就说到这儿了,其他呢就不多讲了,如果你要有兴趣的话呢。
36:09
基本上也没太多兴趣是吧,诶这个用着的话呢,你在这块翻就行啊,其他的比如说跟这个时区的相关的。啊,还有呢,我们可以去计算相应的两个日期之间的间隔,用period啊,计算两个时间之间的间隔,Duration啊,这个都可以,还有其他的一些这种,呃,Clock呀,包括时间校对器呀,校正器呀等等这样的一些类和方法,真的就不一个去说了,这说起来的话呢,有太多了哈。好,然后最后这块呢,涉及到了我们这个JAVA8呢,新的日期时间API呢,和传统的日期时间API的一个转换关系,比如说怎么把这个date呢,诶怎么把我们这个in呢转化过来,怎么转化过去。啊,相互之间这个呢转换啊,这呢我放了一张表,这个有这个需求的话呢,直接看这里边操作就行,我呢这块就不详细的再来去说这个事儿了。好这个就过了啊,然后呢,这块咱们再看一下相关的这个课练习题,这这有个练习二把这个呢,我们稍微再写一写啊。
37:05
好,CTRL一下。新建一个啊。哎,就这个把它呢,咱们粘过来。行,这呢可以看到是两道题。先看这个第一个正在使用这个calendar获取当前的时间,把这个时间呢设置为你的生日,再获取你的生日百天以后的这个日期。哎,看能看懂吧。获取当前这个时间,其实呢,就是创建它的一个实例是吧,Get instance,这不就咱们当前这个时间吗。关键的点呢,就是说,呃,你要把这个时间呢,再加上100天是吧,然后看100天以后呢,是哪个时间把那个打印出来。或者咱们这个你先拿着它去看一下当前这个时间也行,就get time,这不就得到一个date。
38:03
啊,这个你可以在这写说你的生日是吧,加上这个date呗。然后接下来,接下来诶,我们需要呢,就是增加100天,100天以后你看是哪一天。哎,这个呢,拿这个calendar呢,咱们是不是有那个叫爱的操作是吧。然后这块呢,就是这个calendar。他那有一个叫吧。加上100天是不是这样了?对吧,加100天好,然后呢,它是一个可变性的啊,所以呢,它不用说考虑返回了,直接把这个看不就给改了吗。改了以后的话,我们再去获取一下这个time不就行了是吧。这个比如叫这个new的一个。是吧?那这时候我们再去打印一下。说100天以后是。哎,这不就new的这个date吗?行,这块我们跑一下。OK啊,这个呢,就是咱们当前的这个时间。
39:01
然后呢,100天以后。礼拜天也就二三年的了啊,三月份的3月15号是吧。就这一天了,315啊。嗯,OK行,这呢是他,然后呢,我们看一看,同样的这个需求,咱们用新的日期时间API呢,怎么去处理啊。使用这个local daytime获取当前的时间。啊,这个呢,就跟上面类似了,咱们整一下啊。哎,你会发现呢,咱们JDK8里边这个新的日期实验片呢,基本上都是静态方法。造对象的时候,你看都是调类似于这种闹这样的恶是吧,一些方法啊。好out,加一个回车。行,这个呢,就类似于我们上面的这个了。哎,这就它了啊行,然后呢,接下来我们得看一下100天以后啊,这个怎么去处理呢。诶,他那有一个叫plus是吧。诶就它,诶plus这次加上100天,哎这样就行,但是你要注意它呢是不可变的。
40:00
这样的加呢,它本身没变。返回值变了是吧。哎,这个注意一下。诶这块呢,100天以后。哎,这个你得用这个新的啊,这样才行好,我们这块呢去运行一下。诶,你看这儿呢,是咱们现在啊,100平以后啊,还是315,你看这个可读性的话呢,感觉比我们上面这个是不是要稍微好一点是吧。它这个显示的话呢,这个像这个英文呢,对咱们其实不太友好啊,然后下边这个呢,其实要好很多了。行,这个呢,就是我们一个客户联,那关于这个JD8,包括JD8之前的日期时间,API其实挺多的啊,大家这块呢,稍微的熟悉熟悉,知道怎么到对象,然后呢,具体一些方法呢,你可以练练,你说以后要忘了怎么办呢,这块你有这个课件,以后真要需要的时候呢,忘了你过来找一找就行是吧。所以呢,你不能指望说什么东西呢,都往脑子里边去记哈,然后呢,这块你只要有相关的一些笔记呢,直接过来用就行。我看有同学也记笔记,记笔记的话呢,你可以呢,在我这个课件的基础之上呢,比如说你去往里边填一填,补一补,或者你自己再整一个,呃,思维导图也行是吧,你看我这里边记笔记的软件也特别多哈。
41:07
其实咱们学习的过程呢,其实就是在探索笔记哪个更靠谱的一个过程是吧。啊,其实好多笔记哈。这个这个我觉得还挺好用的,我来是吧。那也挺好用的,包括呢,你再看一些微信的一些技术的公众号,公众号呢,有的写的挺好的,你可以呢,直接呃,这个发给你这个的一个公众号,然后呢,自动这里边儿就有了。啊,所以这样你可以攒很多的这种技术文章是吧,当然前提呢,你得办成会员啊。对,还有其他的一些呃,相关的一些工具啊,这个呢,你选一个靠谱的,就是大家呢,就可以呢,去做一些积累了。啊,包括呢,大家你做开发的过程当中啊,以前的时候,你像我那时候刚开始做开发的时候呢,都会去写一些博客哈。现在呢?显然博客已经都过时了是吧?啊,然后呢,博客过去之后呢,后来呢,就开始去写公众号了。啊,因为微信呢已经崛起了啊,现在呢,发现公众号呢,已经好像也不是。
42:04
这个就是现在已经白热化了,你说你现在想起个号,希望这个号呢,这个粉丝量能有多大,好像也已经很难了是吧?诶但是现在又可以呢,你去针对于你的这些技术的文章,你可以呢,去发小红书啊。啊对,发这个CDN呢,其实现在已经也很多了,都是吧,对你发小红书啊,或者你也可以呢,这个以讲的方式露脸的方式呢,发到抖音上啊是吧,也可以哈,但是总之的话呢,至少从这个开发的角度来讲,我们不断的得去积累哈,你选一个靠谱的一个GP的软件。这个时候呢,其实已经不建议大家你再去写手写的这个笔记了。咱们现在才讲第一个阶段,你觉得现在还记得过来,那后边阶段你根本就记不过来了。再加上的话呢,就是以后开发来讲的话呢,我们会看大量的一些代码,包括一些。啊,一些一些知识性的东西,你不可能都写下来是吧,所以呢,一定要记一个电子的一个笔记。啊,电子笔记的话,你选一个靠谱的一个软件,然后可以呢,去做一个记录啊。
43:00
OK,行,咱们就先说到这儿啊。
我来说两句