00:00
好,这是咱们上午呢讲这个simple data formit啊,就关于日期时间这块呢,有一个呃处理这个呃或者处理就涉及到呃日期和字符串的一个转换啊,这个我们叫做格式化和解析,那需需要用到这个结构的话呢,我们就来想这个SIM data防就行啊,当然这块呢,是针对咱们JDK8之前的,咱们用的是这个类啊,那上午的话呢,我们提到一个练习啊,这个需求呢,后边我们会遇到就是将一个指定的这个时间格式的一个字符串呢,转换成一个具体的date,呃下边这个操作呢,需要大家掌握啊,那么这个呃,我这写了个叫练习一,还有一个练习二,这练习二呢,咱们说一下就可以了啊,其实这个练习二呢,很多同学也不陌生,这个大家呢,在入学的笔试的时候,笔试时候没涉及到,在面试的时候呢,通常咱们都会考察一下大家这个逻辑思维能力,那其中有一道题呢,是这个题,有的同学呢,可能遇到过啊,那没遇到的话呢,一块可以听一下,就是说呢,有一个渔夫,这个渔夫的话呢,哎,他呢执行一段这个操作。
01:00
操操作呢,叫三天打鱼,哎对两天晒网,这个呢是咱们的算是一句老话了哈,就形容这个人呢,说的就是不能持之以恒了哈,但是这儿呢,咱们就让这个渔夫呢,就按照这样个逻辑呢,去去执行啊,这个三天点一连连晒网,他从哪天开始执行呢?我们让他呢,是从1990年的这个1月1号。哎,从这一天开始呢,他就按照这样的一个逻辑呢去执行,那其实就意味着一号二号三号哎打鱼,四号五号晒网啊,六号呢又开始打鱼啊,以此类推,就这样下去了。那行,那现在问题呢,就是说,呃,从这一天开始之后的某年某月某日,问这个渔夫呢,他是在打渔还是在晒网,某年某月某日是在打鱼还是在晒网啊,应该有的同学是不是被问过啊。对,有问过的啊,那问过的你们都是说的这个题。
02:02
挂了,嗯,挂了,你后来也得想一想是吧,怎么做呀,对,三天打两天上网,相当于五天一个循环,五天一个周期了,那你需要呢,计算出来就是让你求的这个某年某月某日跟这个之间天数是吧,或者准确的说呢,应该说这一天是从这一天起的第多少天。啊举个例子啊,举个例子,比如说咱们考虑是2020年的这个9月8号,嗯,举例呢,就是说这一天到底是在打鱼还是在晒网,那怎么办啊,需要计算出来就这一天是从这一天起的第多少天啊,那这个事怎么解决啊减啊有同学说我拿2020减去199009呢,减去0108呢,减去零一,减完以后是一个什么鬼啊是吧,30啊三是30吧,三十三十杠二这个零八这这。
03:10
啥也不是,其实是吧,嗯。这这个题呢,它的难点就是我们需要计算一下,这个算是叫总天数了啊,来计算一下这个总天数假设啊,咱们现在这个先等一下想这个事儿,假设这个总天数已经算出来了。后边这事呢,其实就稍微轻松一些了,就是我们拿着这个总天数除以,其实不用除以五了,是不是取模五啊对,取模五呢,看余数,那余数是多少的时候呢,在打鱼呢?这个得想清楚啊,有同学说就泛泛说说小于三的时候,小A等于三对吗?123那零呢,对吧?嗯,所以说余数是多少时候在打鱼呢?应该是123,对,这个呢是在打鱼。
04:06
嗯,总天数啊,你在取模五,哎,这个这个我就是写的是一个尾码了哈,是这个四或者是零的时候,对是晒网,这呢,其实还有一个陷阱,就是说你这个,呃,你出取模五,它可不会说结果是五的啊,这个就变成零了。零呢,正好出境了,就相当于是比如说九月,呃,九零年的1月5号是第五天嘛,那这一天其实在晒网,哎,所以说就是出境的这个情况啊,那这个注意一下啊,这么个事儿啊行,那后边呢,这个就解决了,相当于也算这个题的第二个难点啊,那回归到第一个难点上,就是这个总天数。总天数的一个计算。那这个计算啊,确实是一个难点啊,怎么算呢?啊,对有同学提到一个这样的一个相当于是一个捷径了,就是我计算一下这个毫秒数,那你要计算毫秒数,对咱们说这个日期跟日期,这或者这个日期代表的其实就像个字符串一样哈,或者要字符串或者或者这个这个日期了,你都不能是让它直接去相减了,但是我们要算出这个所谓的毫秒数,它就是一个数了,我们可以让它去相减啊,所以说呢,有同学就会呃这样考虑去做,那你针对于他呢,你可以把它就看成是一道编程题,大家下来呢,可以去做一下这个某年某月某日呢,大家也可以通过键盘去输入,输入呢给大家拼成一个字串,拼成字串以后,现在要求总天数,那就可以呢,利用这个毫秒数,刚才有同学提到的毫秒数的话呢,嗯,那你得是不是算一下它的这个毫秒数,你需要呢,把这个转化成具体的一个date,当然不用circle date实际。
05:58
直接YouTube data就呃下的data就可以了。
06:02
嗯,这个呢,呃,比如说我把这个啊算出它对应那个date呢,我叫做DATE1。这不是这个练习一,我们都讲过了,这个DATE1呢,你去get一下它的time,这就找到它对应的这个毫秒数了,那然后的话呢,同样的道理,这一天你也可以算成一个date,我叫DATE2吧,嗯,DATE2呢,你也可以算成它的一个date,然后get time,得到两个毫秒数以后呢,做减法,这样的话呢,就把整个呢,呃,你这一天。嗯,这个从这一天起,一共呢,经历了多少毫秒就算出来了,接着呢,嗯,你想给它拼成天是吧,那你得千先除以1000先变成秒,嗯,然后呢,再除以60变成多少分钟,再除以60变成多少小时是吧?然后呢,一天呢是24小时,哎,这样是不是就换算成多少天了?
07:06
对,但这时候呢,还得小心个事儿。我们呢,这是一个整数,这也是整数,除法完以后,你可能除不尽啊,咱们最后换算出来已经到天这了啊,比如说你算的是这个这个768点多少多少这个点这块是不是就不要了,哎,在咱们Java这块呢,就是整数跟整数做除法这个就抹掉这个除不尽的这个了,那你这个时候呢,你要按768天算,其实不对吧,对,你得是不是得加上个一啊得这样。那这个要小心点,那如果说恰好万一要是除镜了呢,首先要除镜的这个概率应该极低了,他能出镜呢,就相当于呃,那个时针,就好比是第一天的又到十二点一样,夜里12点是吧,你可以把夜里12点呢,就看成一天,看成是新的一天的开始也可以,所以加个一呢,也没毛病。
08:01
哎,这样的话呢,咱们这不就求出来这个总天数了,哎,这样做啊,这个呢,相当于就借用一下咱们这里边提到的这个,哎,字符串到日期的一个转换啊,当然这道题的话呢,其实还有别的方式啊,就这种方式呢,是挺巧妙的,总感觉怪怪的是吧?呃,比较正常的一个思路呢,就是你可以这样去考虑,那西呢,九零年的1月1号,我们想计算这一天是多少天可以呢,大家先算一下他那距离,咱们叫2022019吧年的12月31号,哎为啥拿它考虑呢?对,正好到这,这是不是都是整年啊。对,九零年到一九年减一下。加个一。是不是就知道这一共是多少年了,对吧?哎,一共多少年了,多少年的话呢,一年咱们先按3365去算,这不就算出多少天了,哎中间呢,你再拿这个年,咱们以前也讲过,看看是不是闰年,是闰年呢,你再加一天是吧,你看有几个闰年就多加上几天就可以了。
09:08
诶这呢,就把这个整年的这不就算出来了,然后呢,咱们再去计算一下这个,呃,2020年,应该这是其中一部分哈,再加上这个2020年的,呃,1月1号,呃,距离2020年的9月8号,就是这一天呢,是当年的第几天。咱们以前讲Switch case的时候,这不也讲过这道题吗?哎,你再把这个时间跟这个时间呢加一起,这总天数呢就也出来了,那然后呢,你再去诶末A5这样去计算就行。对吧。能转过来吧,啊就这样去考虑啊,行,这呢就是这道题,那这道题的话呢,就是没要求大家就是面试的时候没要求用这个代码去写,那现在咱们讲完这个内容以后,大家实际上呢,是可以用代码去实现的,嗯,下来呢,可以做一下,这块的话呢,你也可以让他从键盘去输入年月日,输入完以后呢,你拼成这样的一个格式,你用这个方式一也好,方式二也好,大家下来呢,可以考虑去做一下,哎,思路有了以后呢,这个写代码其实呢,应该是一个比较简单的事情了,大家可以做一做啊行,这是这道题。
10:19
啊,那么大家比试的时候呢,其实还有很多其他的问题啊,这个涉及到比如说这个这个十个数里边啊零到九,我抽出来这个三个数做和啊,合适奇数啊,诶有有几种情况出三个数等等好多这个问题啊,这个同学下来一会跟我聊天,就说说反正你这好像这个笔试题跟面试题出的感觉挺low的啊,我说为啥low了呀,他说里边有好多题呢,比如说排列组合题,说我根本都不懂排列组合,或者我都忘了,然后呢,我数都能数出来,他那题出的就是有点漏洞啊,我说呢,你理解的正好相反啊,这个题目呢,呃,就是这样出的,就是呢,哎,如果呢,你大家会一些排列组合很快的就以做出来,如果你要不会,你要想这道题我一定要解决啊,你要解决的话呢,你哪怕可以去一个一个数都行,只要你数数对了也算你对。
11:09
就相当于呢,拿到一道问题的话呢,就是你可以用更更快的方式去做,你要没有的话呢,那也要判断一下你解决问题的能力是不是要强啊,我要想办法把它解决出来,你可以想各种各样的招去解决,只要解决出来对了都可以,所以这个思路呢,就是希望大家去打开啊,所以呢,才出的这些题啊,解决完以后呢,他觉得啊,好像挺挺高大上的是吧?啊因为大家笔试面试题基本上呢,都是我出的啊啊行,这些题呢,咱们就说到这儿了。
我来说两句