Date类
java.util.Date类,需要导包,表示时间点,精确到毫秒
时间原点1970-1-1 00:00:00.000GMT,
所以计算当前时间就是计算从时间原点到当前的经历了多少毫秒
![](https://img.haomeiwen.com/i16668075/f05dad0b39543696.png)
如上,我们可以使用System.currentTimeMillis()获取系统当前经过的毫秒数,这里需要注意的是中国是东八区,会把时间增加8个小时
简单介绍时间后,我们介绍Date的构造方法和成员方法
Date类构造方法
![](https://img.haomeiwen.com/i16668075/3368fceba1c47dc1.png)
看文档可以得到无参,年月日,年月日时分,年月日时分秒,以及date毫秒值初始化构造
date()无参构造获得的是当前时间,如下,其中CST表示的是中国标准时间
![](https://img.haomeiwen.com/i16668075/4fe640149e9645ba.png)
Date(long date)构造,如下基于毫秒值给的构造,这里我们传入0,表示是时间原点,这里因为是东八区,所以+8小时
![](https://img.haomeiwen.com/i16668075/9044f80c00f1aefb.png)
对于年月日时分秒这些,相信不难,我们就不一一详解
Date类成员方法
getTime()方法,获得实例的毫秒数
![](https://img.haomeiwen.com/i16668075/b623b7d07e45e13f.png)
其他方法我们查看文档发现好多被Calendar替代,我们后面就会讲到
DateFormat类
是格式化的日期时间类,我们可以通过这个类将时间与字符串进行互相转换,我们查看文档,可以知道其是个抽象类,在java.text下,其父类为Format类,这个类有3个子类,一个是我们要讲的时间格式化类,另两个是字符串格式化类和数字格式化类
![](https://img.haomeiwen.com/i16668075/1225c0307303d29b.png)
成员方法里2个比较常用的是format方法(下图的第一个),输入Date类,输出String类
![](https://img.haomeiwen.com/i16668075/e113f77da3d1f67b.png)
还有parse方法,输入字符串,输出Date类型
![](https://img.haomeiwen.com/i16668075/0e8f8b254856fb83.png)
由于是抽象类,我们无法直接使用
![](https://img.haomeiwen.com/i16668075/622ec2306aa8e66c.png)
我们使用子类的SimpleDateFormat来实例,实例需要传入Pattern模式字符串
相关事件字母模式y年,M月,d日,时H,分m,秒s(里面月和小时是大写)
如输出"yyyy-MM-dd"就是格式化年月日-连接
format方法
![](https://img.haomeiwen.com/i16668075/f49fcd4396285d95.png)
如上,我们给SimpleDateFormat传入模式字符串,然后尝试打印date(0)参数的日期,显示如上,即时间原点信息
![](https://img.haomeiwen.com/i16668075/bcd22f40dd592de2.png)
当然我们pattern是可以自己设置的,如上
parse方法
parse方法使用,也是先实例化传入pattern字符串,然后调用parse方法,也许我们就信誓旦旦的去调用了,但是这里却出现了异常
![](https://img.haomeiwen.com/i16668075/c1d5d86745edb42a.png)
这是其本身的问题,因为解析时调用java的文本异常解析类需要添加导入,感觉不是那么智能- -
![](https://img.haomeiwen.com/i16668075/aaeb70cdbfe55313.png)
还好intelliJ帮我们解决了,点击灯泡选择第一个即可,
![](https://img.haomeiwen.com/i16668075/17e078a099a0c181.png)
这样我们就能正常解析了,我们这么繁琐的添加是因为我们如果输入了模式不匹配的字符串,就会能准确报出异常
![](https://img.haomeiwen.com/i16668075/3c2ec03984e5c43e.png)
如上,我们输入少了日,结果就会报出解析异常
一个小练习,输入生日,计算当前过了多少天
![](https://img.haomeiwen.com/i16668075/d7a011943ba9d19c.png)
Calendar日历类
我们之前说了Date类很多方法jdk1.1以后都被Calendar类取代了,这里就是重点获得其方法
![](https://img.haomeiwen.com/i16668075/a6f501a6e07a8d2a.png)
其在java.util下,是个抽象类,虽然也有子类,但是我们使用方法时常常使用
Calendar rightNow = Calendar.getInstance(); 来获得子类对象(多态写法)
其方法和属性在文档里可以看到
![](https://img.haomeiwen.com/i16668075/a3d9530aef878ebf.png)
如上,我们打印子类实例,可以看到其toString是复写的,显示的是各种日历信息,如当前毫秒数,时区,偏置毫秒数,等等
java.util.GregorianCalendar[time=1583114835650,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=2,WEEK_OF_YEAR=10,WEEK_OF_MONTH=1,DAY_OF_MONTH=2,DAY_OF_YEAR=62,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=7,SECOND=15,MILLISECOND=650,ZONE_OFFSET=28800000,DST_OFFSET=0]
![](https://img.haomeiwen.com/i16668075/019d84fd4afcebac.png)
Calendar类有4种常用方法,如上,获得日历的字段值,设置字段值,给字段值添加删除量,返回Date对象
![](https://img.haomeiwen.com/i16668075/359804702ecf4071.png)
我们需要注意的是使用Calendar类的字段,必须知道其字段值int类型,如上,年月日时分秒分别为1,2,5,10,12,13
get方法
![](https://img.haomeiwen.com/i16668075/3c52035f9f2c5196.png)
如上,这里需要注意的西方月份是0-11,我们这里需要转换+1
![](https://img.haomeiwen.com/i16668075/b72eb25529448afa.png)
当然,日历类Calendar对于这些常量值是静态属性存储的,我们可以获得其值,通过IDE,因为有时候不记得具体多少
![](https://img.haomeiwen.com/i16668075/085181198c7484e0.png)
我们常常有要求获取一年第几天,这里也有专门的字段
set方法
![](https://img.haomeiwen.com/i16668075/3a7401db9d30472a.png)
![](https://img.haomeiwen.com/i16668075/175824087135fd8e.png)
当然这里设置超出范围的值会自动转换,如上,我开门设置日为32号,当前为3月(老外-1)会自动变成4月1日
![](https://img.haomeiwen.com/i16668075/d77e2264a0f9b772.png)
当然set方法也是支持多值的
add方法
![](https://img.haomeiwen.com/i16668075/7c5976d646b0e943.png)
如上是增加方法,传入负值即递减
![](https://img.haomeiwen.com/i16668075/7d8607d177590e02.png)
如上,1月1日(老外0月1日)减1天到去年的12月31日(老外11月31日)
网友评论