00:00
那将来呢,咱们继续往下看,我们说张润发呢,它出了一套全新的时间和日期的API,代替了原来的时间和日期的API,对吧?那么我们问题讲,所以他为什么要出一套全新的日期API对吧?时间日期API代替原来的API呢?那么说原来的日期和时间API大家都用过吧,觉得觉得好用吗?有有点不太好用是吧?当然你们用习惯了,那就另当别论,但是呢,它确实是不好用对吧?比如说哪里不好用呢?比如说比如说我们看看最开始的那个date对吧,我们date呢,实际上最早出的时候,它是不是叫做1.0之后出来的版本啊,1.06了对吧?1.0出来以后呢,大部分呢,是不是都已经过过时过期了呀,对吧?它为什么过时过期呢?原因是比如说我们原来要是利用这个date的构造器创建一个对象的话,我是不是得传年月日,然后什么十分秒啊,然后注意它要是传年的话,它。
01:00
那会用这种去设置,设置什么呢?用年加1990,不是1900,那就意味着什么呢?比如说那我加假如现在是22016年吧,我想传个构造一个2016年几月几日的时间的话,我得传叫做什么216万。是不是得传传两百一十二零一六的,是不是116啊,那说不得传个116完了几月几日,那是不是非常的麻烦呢?对吧,这种使用方式根本就非常的不好,对吧?那所以说它大部分的呢,都已经过时过期了,那么于是后边出来了一个什么呢?叫做点calendar类对吧?那这个类后来说在GDK1.1以后,是不是出来一个叫做calend德类呀,对吧,是不是1.1以后出来的呀,说它可以干什么,它是可以对时间和日期再做一些预算呢,比如说这个,呃下来个计算,一个周日啊周一呀等等,对吧,然后加上两天,减上减去两天对吧,但是呢,比如说它加两天,加两天用I的方法对吧?它减两天呢,它连I大哥,比如说负二是不是这个意思啊,对吧,减两天就是我们讲,比如说今天不是不是这个18号吗?对吧,假如说我想在这个日期的基础上,是不是减去两天呢。
02:19
那它的方法叫做I的I的一个负二对吧,所以说这个是不是也用起来比较麻烦呢?再一个比如说还有什么不好的地方,就是他每周的第一天是从默认是从星期几开始,星期日默认是每周的第一天末号,跟咱平时用的也有点不太一样啊,对吧,那这个是,然后再一个呢,就是他这个时间和日期呢,他怎么样呢?没有提供时区的支持,如果提供时区的话,我说是不是有个有个这个呀,叫做time重对吧,但是呢,我说即便有一个time重,它使用起来麻烦不说,还有一个我们说在账号当中,时间和日期一天一个很最大的特点就是它们都不是线程,安全的含义是它们都是可变的。
03:08
可变的就意味着说当多个线程同时去操控日期时间的话,那咱们是不是就存在线程安全问题呀,对吧?存在线程安全问题,那么甚至于说什么呢?甚至于说我们说格式化二期和之前的用哪个呀,是不是single date format呀,对吧,Date format,但是single date format在哪个包中,是在test包中啊对吧,它明明是用于操作为时间日期格式化的,但是它却在test的包中,对吧?所以说他们当时的声明呢,非常的不规范,并且呢,对吧,使用起来呢也比较麻烦,最最重要的一点就是它是可变,呃,它是可变的对吧,也就是说它存在线程安全问题,那么全新的1PI呢,它就是说是不可变,是不可变是什么意思啊,还记得原来咱们讲说串吗?要说使string呢,S string,我们是不是就称为不可变的自数序列啊,指的就是说你不管对他做怎么样的改变它。
04:08
说都将产生一个新的实例啊,对吧,那这就叫做不可变,所以说全新的一套ABA在哪呢?在发展,所以整体都是在time这几个包下呀,对吧,它们整体都是叫做不可变,也就是说你不管做怎么样的改变,都将产生一个新的实例,通过这个来得到结论是什么呢?它不可变,所以说它也是线程安全的,对吧,解决了一些线程端这个多线程的安全问题,一会咱们可以演示一下,对吧,然后呢,它所有全新的一段时间出分全都在这几个方向啊,并且非常有规律,比如说我们说专门先看这个time time包,Time包下呢,都是针对一些时间和日期操作的,对吧,比如说用于表示日期的叫做time date的吧,对吧,这是表示日期的,然后呢,他们都遵循的是ISO8601这个标准,这个也就是说世界针对于日期时间。
05:08
格式的一个统一标准,这是不是一个世界的一个标准啊,对吧?我们说新的日期,这都针对于这个标准对吧?叫log date,专门表示日期,日期是不是哪年哪月哪日啊,对吧?所还有专门用于表示时间的叫做call time,对吧?什么叫本地时间?什么叫本地时间?也就是说我们人读的时间日期。听明白了对吧,我们人读的时间日期,那这是不是表示时间呢?那相应的它是不是也有单独表示叫做时间和日期的呀,对吧,也是这套标准,然后这就是叫做日期和时间。这个啊,我们说这几个,那都是我们人读的时间和日期的格式,也就是哪年哪月哪日提前几分几秒这时候都是我们读的啊,那我说那另外一个是什么读呢?我有的时候我们是不是写程序呀,我们书需要这个计算机读的时间呢。
06:07
对吧,我们说计算机所认识的时间是什么呢?我们说是称它为时间戳啊,用这个用instant这个这个类,那这个呢,就是专门表示叫做呃,计算机所读的时间,也就是时间戳,这什么是时间戳呢?就是从1970年对吧,1月1日00:00:00,那此时此刻的一个毫秒处,那时不就指的时间说啊,也就是计算机所读的时间啊,然后还有什么呢?比如说还有计算两个叫做时间之间的间隔的,还有计算两个日期之间间隔的,对吧,还有计算一些偏移量运算的,比如说我加几个小时减几个小时,做一些偏移量运算对吧,做一个偏移量运算的对吧,等等这一系列操作,当然是不是还有叫做关于。呃,这个叫纵ID,是不是时需运算的呀,对吧?时需的一个运算,这个呢,就是时间和日期排很有规律,说这个是time,像在下边的这几个呢,下边这个CC里头都是什么呢?就是对一些比如说用于时间校正记,或者说对一些时间日期就有一些特殊格式,不能说校正,像说是特殊格式的,说什么是特殊格式呢?我们说比如说呃,我们说日,比如说日本吧,日本读的时间和日期格式跟平时的那个标准一样吗?好像是不太一样,对吧?他们好像是读的什么叫做什么平城几几几几年,然后什么综合几几几几年。
07:39
是不是没出现了吧,对吧,那是日本人读的时间啊,包括还有什么呢?包括台湾,台湾他读的日期,日期和时间的格式是不是也不太一样啊,他们什么叫做中华民国,每每每每年。对吧,对吧,这里头都包含在这了,对吧,有这个怎派日本的对吧,有台湾的,甚至还有什么说的相对来说比较复杂的,什么叫做伊斯兰教,伊斯兰教呢,它也有自己属于自己的一套时间和日期系统,是不是说如果你有一些特殊时间日期处理的,那是不是就带着可能这个包啊,对吧,是这个包,那说除了这个以外还有什么呢?Format format,看上面这个format,那你们想想是干啥的?
08:21
哎,是不是用于对时间力器格式化的呀,对吧,叫做format包,那么下边呢,这叫temp这个包才是叫做时间校正器啊,时间校器比如说我要看看下一个工作日是哪天,我要看看下一个周日,我看看下一年,类似于这样的对一个时间预期是做预算的呀,对吧?那就是来找这个叫做temple这个包,对吧?那么还有一个叫做time z,这里边是不是就是专门对于时期做一些规范的呀,对吧?所以说他的这几个包是不是都很有规律呀,对吧,相较于之前,比原来的那套时间日期API有规律了许多,并且在应用方式上也不一样,对吧?那最大的一个不同,我们说新的时间是PI,和原来的时间是切PI,最最大的一个不同,那就是说了,原来的他说不是现制安全问不是现在安全的呀,现在的这一套他解决了一些多线性安全问题,所以说我说他们是叫做不可变。
09:21
对吧?那么我们过来看一看,说什么叫做多线程安全问题,以前操作这个遇到过多线程安全问题吗?没有没有,没有的话,那就是咱们是不是过来试一试啊,稍微的对吧,以后可能会遇得到啊,比如说什么呢?比如说来个叫做test test symbol吧,Simple date,用这个格式化去操作format可以吧,对吧,用这个看看它存在什么线程安全问题,比如说呢,现在我构造一个symbol date format对么?来个D,呃,叫做SDF,用一个symbol date forat,什么指定啊,时间日期格式啊,YYMMDD是年月日啊,对吧?那么接下来我是不是要用它对一个时间或者日期进行一个格式化,对吧?那但是我是不是要多线程啊,对吧?多个线程同时为时间日期进行格式化,那么怎么操作呀。
10:17
那咱们咱们选哪种操作方式好呢?搞个线程池可以吧,对吧,搞个线程池的话,那就是那就是exec excuseor对吧e exec service吧,对吧,Exec service,然后呢,叫做或new一个啊不是new ex对吧,Ex这怎怎么拼况呢?EXEEX斯点上new fix的po是不是比如说创建一个长度为十的一个线程池啊对吧,长度为十的一个线程池,然后这样的话,它是不得需要一个实例呀,或或者直行的呀,对吧,比如说我们来个Co可以吧,C是不是带返回值的呀,返回date对吧,叫做嗯car吧,我们用一个columnful,然后呢在这里。
11:17
里边呢返回的都是date,然后这里呢,Ctrl shift o导一下包是不是考个实线呢?对吧,搞个实线这回返回什么呢?返回SDF.part然后解析哪呢?来个二零一六十二月18号是不是解析这个事啊对吧?解析啊这没问题吧,Co之前提过吧,对吧?带返回值相交于装是不就带返回值啊,然后呢,这个时候呢,我就可以怎么样了呢。叫我来个,我执行多少次呢?执行嗯十次吧,可以吧,双防十次啊,执行十次,执行十次呢,然后它有个结果,结果呢,都给它放到集合里,叫做future,它从返回一个结果叫future future future对吧。
12:11
是这样修是不是F用to啊,Controll shift o result是不是对吧?然后另用一个list,然后呢,Controll shift,在这样的话呢,我就来一个叫做比赛,我把它们返回的这个结果执行之后的结果是不是都给它加到集合里去啊,比如说result点上I的at什么呢?I的破点叫做follow了me是吧?然后呢,来个或者这个叫task也行,把它也改成task可以吧,进行task返回的结果都放到线程里,呃,都放到集合里,放到集合里头,我说把集合的内容遍利一下啊,对吧,然后来个c out future future点上点上来个get,把那个结果都给它get一下,对吧,它有异常我给它抛个section。
13:11
是不是错了吧,对吧,搞一个线程池,然后呢,分别十次去访问我这个吧,是不是都来解析这个时间和日期啊,对吧对吧,都去解析它,然后最终的结果呢,我给它用这个放都放到集合里,然后再把这个集合里边结果遍利出来,这个效果呢,我右键运行一下。是不是已经报错了,是不是已经这个格式已经解析不了了,对吧,是不是已经存在现场安全问题了,对吧?那这就是说single data的腐败,或者说传统的所有的这个apin它都存在多线程,呃,传统的这个时间线的是不是全存在线程安全问题啊,对吧?存在这种多线程安全问题,那么我们说要拍拍上说的话,要是要以前这个问题怎么解决?
14:00
是不上锁呀,那同是上锁呀,对吧,那我们说怎么上锁呢?说今天有同学问了一个,那同是上什么锁,我们说12的log口可不可以local,可以的对吧,那咱们就搞一个th local,那叫做date for my th local对吧,Th local,那么thad local是不是出来了,是不是可以锁这个变量啊,然一个final的什么呢?Thread local,哎,Lo CL对吧,然后呢,叫做呃。在待判刑对吧?待判刑呢,叫做date format可以吗?对吧,叫做date format df吧,然后等于new一个thad local对吧,Data for ma,然后直接给它实现,它里边是不是有个供子类去继承那个方法呀,对吧,我们点过去看看哪个来着,叫做阴译头Y是吧?是不是这个方法对吧?那么这个时候呢,我就给它来个呃,它,然后这里return,这个是不是得是date for mind呀,Return谁呀,Return date for mind得是子类吧,是不是那个single date for my呀,然后在这里指定的yyyy m Mo对吧,MMDD是不是这意思,这是你们以前的control shift o,然后当然我们是不是来提供一个方法用于转换的呀,就是来个static,返回什么呢?返回date吧,叫做。
15:35
Con,换是转换,转换什么,你传过来个字符串,我把字符串呢,通过symbol for是不是给你转换呢?对吧,叫d return df,点上get,点上pass,把这个source是不是来个转换,它有一层我给它抛出去。可以吧,这时就给它锁了吗?对吧,所有的local,那这样的话回过来我们说这一次转化好就不用这symbol data吧,对吧,对吧,行不给大家保留了,这个都是以前的这个,那这里是不是也就不用它了呀?我用谁呀?用date forat sweat local吧,是不是点上叫做convert,然后传20161218是不这可以转用这种方式转吧,但是我这次的S是不被我logo给锁上了呀,对吧,那这个时候右键再去执行是不是可以了,对吧?这个证明我他妈代码是不是没问题啊对吧,这个诶问你们一句为啥没停了。
16:43
哎,我这池怎么样啊,池是不是没刹到呢?对吧,我们说这个这个时不的话呢,对吧,破点是不是来个沙弹啊对吧,这样啊,再去右接运行是不是搞搞定了对吧,是不要让关啊管那这样的话是不没问题啊,都是18号啊12月吧,对吧,2016年我是不是没指定时间,所以说它默认是00:00:00啊对吧,那这就是我们传统的解决方式,也就是原来要就是你们目前来看,咱们你们现在样把这个时间日期A篇用到空间程中解决,怎么解决,是不是现在这么解决啊,现在是不是可以这么解决,还要是用1.6以前用到欧洲对吧,那就这么解决,那么现在是不是用了1.8了呀,1.8了以后呢,它完全呢都是不可变的,就解决了这一套多线程安全问题,那么比如说什么呢?我们说新的一套API是不是叫做local date了?
17:44
啊,对吧,是不是不叫date了,叫local date了,那这里返回来也叫local date,我就在原来的基础上给它稍微改一改啊,那么这样的话,这里也是叫local date,然后crl shift导向包,然后呢,转换在新的一些API里头转换用谁呢?用到data for for,嗯,Datatime data time for matter看到吧,叫做DTF,等于叫做date time for matter点这里是不是它有指定的任何任何的格式啊对吧,这里是不是有这个叫做什么日,呃,ISO对吧,然后date time什么什么标准的时间日期可式啊对吧。
18:27
这叫日期和时间格式了,对不对,对吧,那我比如说我就来个本地的日期就得了,就来个local date行吧,对吧,那这个时候我就按照这种格式转,他给我们提供了大量的我们所常用的一些格式,当然我们说你想找个自己指定的格式怎么办呢?怎么办,嗯,叫做什么party那个。叫做of of pattern吧,对吧,你就可以在这里指定YYYYMM是DD啊,是这种格式吗?对吧?然后呢,你就可以进行一个转换,比如说叫做local data,点上叫做pass也可以,然后转谁呢?转2016年12月18号按照谁转,按照DTF去转换是不是新的日期呗,这次我没有什么外logo的吧,这是全新的API了吧,对吧,那右键运行做核定对吧,他说没有什么多线程安全问题啊,对吧,因为它你不管做怎么样的改变,他说都给你产生了一个新的实例,对吧,不管做怎样的改变,都将产生一个全新的实例,所以说它是线程安全。
19:41
那么这个就是传统时间是CPI和现在的全新一套时间是gpi的一个最大的差别。
我来说两句