00:00
好,那么关于这个日历类的话呢,我们就呃说到这儿了啊,这个下边呢,稍微有一个这个这个注意的信息,这个大家关注一下,就是这个月份的时候,比如我们想获取一下是这个当年的第几个月,这个月份的时候呢,要小心点,这个一月呢是零,嗯,然后后续这样的类推,然后星期这块的话呢,这个星期日是一,然后一直到周六是七,对这个呢,我们要得这个数,你看这个数,比如是七,你别以为这是星期日,这个是星期,诶周六的意思,对周六的意思啊,行,这个关注一下就可以了。那么接下来呢,咱们看一下JDK8当中的新日期和时间的API啊,就是刚讲完一波啊,还没记得住,发现又一波新的是吧?哎,确实是这样子的啊,那么我们再看一下这个JDK8当中啊,新的日期是经API有哪些,那讲这个新的之前呢,先得说明一下啊,我们为什么明明有了刚才一些类了还需要引入。
01:00
新的啊,肯定有一些问题,好我们看一下啊,这块有个介绍,嗯,说呢,那我们跟别人说说,我们在这个时间点见面,这相当于给了一个毫秒数,那肯定不现实啊,这个呢,咱们要求呢,相当于是对于人来讲,咱们呢这个表述这个时间希望呢跟这个昼夜有关系,还希望呢跟四季有关系啊,我希望呢是哎某年某月某日的啊什么甚至哪个呃哪个天气呃哪个天气不现实了啊,就是中国农历的话呢,不是什么子时啊午时啊什么的,是吧,来见面啊就是非常的具体了,肯定不是这种这个干巴巴的这样的一个数啊,那么就是我们这儿呢,有很多的诉求啊,这个诉求呢,肯定要体现在咱们这个代码当中,给用户呈现出来的也应该是一个这个相当有感情的这样一些数据了啊,不能是干巴巴的写这样的一串数字啊,就相当于我们对这个日期。
02:00
时间要求呢是比较高的,那么在这个JK1.0的时候呢,提供了一个类,1.0就给了一个类叫做date,用它呢来处理咱们平时需要的一些这个时间的日期,时间的一些诉求,但是呢,这个类呢,实际使用当中发现并不好使啊,这个API呢,在JDK1.1的时候呢,它的大部分的方法就已经被过时了。那我们看一篇呢,当时也见到过我们这个date。不管它的这个构造器那delicated了,它的这些方法的话呢,很多也被delicated了,就相当于呢,不建议去使用了,那么不建议使用替换成谁了呢?打开以后。他这块呢,应该是有写,你看在GDK1.1的时候呢,我们就被deprecated了,他呢建议啊replaced by说建议呢,你用这个calendar去做,咱们刚才这不也演示雷斯的get方法,这是在JDK1.1的时候呢,相当于引入了一个新的结构,就是我们看到的这个calendar jdk1.1。
03:05
在这儿呢?那我们呢,如果把这个date呢,看成是我们日期时间的第一代API的话,把它看成是第一代API的话呢,这个calendar呢,是可以看成是第二代的API。嗯,这是在JDK8之前呢,相当于很多时候我们都是用的calendar啊去做的这个操作,但是呢,这个calendar呢,还有一些问题,这个问题的话呢,我总结出来了这样的四点。好,第一个叫可变性,说像日期时间这样类呢,应该是不可变的,这个能理解什么意思吗?嗯,对,就是刚才呢,其实我讲的时候呢,已经是把这个点啊渗透进去了,咱们呢说string是不可变的,就是我们比如说你这个日历啊,呃,这get不算了,没有修改,看set,我们呢,拿着这个对象去set,重新指定一个天数,我们说呢,其实应该让这个类呢是不可变的,就应该像string一样啊,你修改完以后呢,你你把这个返回值当成是你修改以后的这个日历本身这个日历呢,尽可能的叫不变。
04:08
而现在呢,我们set完以后呢,返回这是VO,相当于把它本身呢给变了啊,相当于在这个set,包括下边的A呢,体现出来的就是我们这个calendar呢,哎,它是一个可变的。它是可变性的,就是直接呢,对它就修改了,对于日期时间这样一篇来讲呢,其实不太好。这是第一个点,那ya IG呢,我们GDK8当中的新的日期时间的API就是不可变的了啊,下一个呢,叫做偏移性,说date的年份是从1900年开始的,月份是从零开始的,诶这是什么意思呢?这是这个意思,举个例,举个代码啊,嗯,这块呢,我再新建一个啊class,嗯,我就我就我这样说吧,叫JDK,嗯,八当中的这个date和这个time,嗯,它的一个测试啊。
05:04
哎,JDK8当中的啊,日期时间啊,这个API的一个测试,那我们说这样的一个问题,那我们测试谁呢?测试一下这个date啊,这个date的话呢,你看我date一个对象。首先呢,指定我们这个date呢,是U下的。好在这个位置我们加一个小括号,这呢是咱们用的这个空三的controlr的斜杠,我们发现呢,它其实有一个这样的构造器,指定年月日的,只不过呢被depar了,不建议用,那我们现在就用一下,我现在呢,比如说想表示一下叫2020年的9月8号。哎,是啊,这这写错了,这这逗号是。哎,那逗号的话呢,这个就别这样写了,零开头的是不是成了这个八进制了。
06:06
零开头的是吧,那别写零了,就啊就写这个,这呢,我写的是2020年的9月8号,写完以后呢,这时候咱们这个打印一下。打一下按说呢就掉兔子方法看一下好打出来了,打出来以后呢,大家看这个数。看列数,诶,我现在是2020年,怎么出来一个3920年呢。哎,我是9月8号,这怎么写的是这个10月8号呢。哎,这里边儿呢,就涉及到一个叫偏移量的问题了。啊,偏移量你看我这个构造器点开,我这写的是这个ear mass和这个date啊,它这呢,你看啊,当我们调它的时候呢,它其实这个相当于啊相当于是这个呢,呃,这个canadaend是后来来的哈,就你写的这几个数呢,相当于是在这里边做这样的设置,通过这呢看的能清楚一点啊你看这个页上面是不是加了1900了。
07:10
啊,就相当于它有个偏移量啊,而这个month呢,Mass咱们刚才写的是想让是九月,但咱们知道在这个canadaalend当中,这个月份也是从零开始的,所以你写的九实际上相当于十际当中的是不是十月了。对,这就是我们说的这个问题,哎,Date呢,年份是从1900年开始的,这个一月份呢,是从零开始的。如果大家。哎,如果大家呢,你真的是想表示2020年的9月8号怎么办呀,对,你得把这个偏移量呢,得给它减了1990年这呢,你想表示9月8号得减个一倍,哎,这样你才能够得到是咱们要的这个时间。嗯,这个我剪191900年吧,我写成1990年了。
08:03
哎,这样。那这时候呢,才是2020年的这个,呃,9月8号,哎,把这个事儿呢,咱们就叫做这个偏移量啊这样。哎,得到的是它这呢就是叫这个偏移量的问题,你这个偏移量这样的话呢,呃,如果要是不熟悉的人,那很容易呢就用错了,那这样的话使用起来其实挺不方便的啊,这呢就是我们说的这个叫偏音量的事儿,然后下一个呢叫做格式化。哎,格式化,咱们在讲simple data form的时候呢,叫格式化,这个格式化呢,只是针对我们date来讲的,但你后来不是又说说data不建议去用,建议用calendar嘛,你建议我用calendar,但是你格式化的时候呢,你又没有提供跟calendar操作相关的方法,你还是让我去操作data。这不就很奇怪吗?啊,这涉及到格式化的问题,此外的话呢,对于我们日期时间API来讲,它也不是限制安全的啊,没有涉及到这个C风站的同步啊,同时呢,还还说呢,不能处理这个闰秒,这个闰秒是什么意思呢?呃,说白了就是说这个世界这个时间的时候呢,在计算的时候呢,有时候会有一些由于地球这个自转的不均匀性啊呃长期变卖啊等等一些特点呢,需要呢,在这个年末或者是年年终的时候呢,呃,世界呢,统一的给他去加上或减去这个一定的这个时间,把这个事呢,就叫做闰秒啊。
09:29
嗯,比如说到目前全球已经啊进行了27次这个闰秒,都是这个加上了这个指定的这个,相当于是拨快了一秒,诶向后播了一秒是吧。哎,就这样个小事啊,对于咱们现有的API来讲的话呢,它不能够处理这个瑞明。啊,这是这个事儿啊,呃,这是这样的一个规律啊,这个好像有外国还说说这个中国造了这个三峡以后,说地球自转都慢了啊,啊,所以相当于是在这挡着那个水流了,然后呢,就让它变得慢了,我感觉也不咋靠谱哈,哪能那么夸张啊是吧?嗯,总之呢,哎,这里边说到了,就是像这个日期时间的API呢,这呢有一些问题,那基于这些问题的话呢,我们需要一套新的API啊,下边也提到了,说这个对日期时间的处理一直是渣成员最痛苦的地方之一啊,就是很不方便啊,处理起来有好多事儿,好,那下边的话呢,我们就需要引出新的API。
10:26
说呢,第三次引入API呢,是成功的,也如我们说这个JAVA8这一次引入他呢,引入了就是java.time相关的一些API,纠正了过去的一些缺陷,将来很长一段时间之内呢,都会为我们服务啊,基本上在可以看到的这个时间段之内呢,我们就不会再去关于时间这块引入新的一篇了啊这一次引入呢,就能够够我们基本上这个使用啊,那这个引入的话呢,实际上也是先借鉴了另外一个相当于是第三方的一个,呃开源的一些这个这个框架或者开源这个叫炸包了啊啊实际上呢,是人家有一个有一套这个开源的一套,这个炸包叫呃周大碳啊,其实呢,在这个JDK8之前就已经有这样的一个炸包,大家呢,可以通过回头呢,我们会讲这个men啊,配这个men的方式呢,把它集中在咱们的这个项目当中,就可以用这里边这个日期时间的API了啊,后来用着用着发现确实挺好用的啊,干脆这个三公司出了个张二八,说咱们把这个周大time里边这个API呢,干脆集成在我们。
11:26
Java里边得了,省得大家每次用的时候呢,还得去倒这个JA包了,哎,所以说呢,我们这个Java吧里边呢,诶才加入这个新的API,这个新的API呢,其实在以前没有的时候,大家可以去添加这样的一个扎包来做。嗯,或者换句话说,如果现在呢,大家公司当中用的是JDK7或者之前的版本,你还想用这个新的日期时间API,你还去用这个,诶周大太里的哎,就可以了啊,行,那么引入了哪些这个核心的类呢?还提到了local data啊,Local time local daytime啊,Zone的daytime带这个时区的了,还有这个duration啊等等这样的一些类啊,使得我们这个操作呢,就大大的简化了,同时呢,也解决了刚才提到的这样的一些问题,好,这个我就往后说了,那相关的一些API呢,就体现在这块了,java.time啊下边呢,有好多的这个,哎,包这个包下边呢,有各种各样的这个API,哎在咱们这个代码这块呢,也能看得到啊,嗯,找一下咱们这个。
12:28
Package啊,再往再往前一点,哎,这呢是咱们这个API,大家呢,去找这个带这个time的。哎,这样一波这些呢,就是咱们这个JAVA8当中给我们新集成进来的这API,那如果你要看的这个API呢,是这个八之前的这个版本,你就找不到这样的一些包了啊行,这呢有关于它的一些介绍,下边也说到了,对于大部分开发者来讲呢,其实我们要用的话呢,也就仅仅会用到这个time包,还有这个叫form,涉及到格式化解析的包啊,其他的一些这个包里边很多API呢,其实我们都用不到啊,那虽然提供的很多,但是呢,对于大部分开发者来讲,也顶多呢会用到其中的1/3,这就可以了啊,包括呢,前面咱们讲这个张二期的时候,那这呢,你看写了这么多,其实也不是说我们所有的都用到了啊,也没有都讲到。
13:19
行,这是关于这个API的一个问题,接下来的话呢,我们就具体的开始去讲解这里面涉及到的哪些具体的API了,啊,这个我们先停一下。
我来说两句