美文网首页
21 时间日期类

21 时间日期类

作者: ca8519be679b | 来源:发表于2020-03-02 10:57 被阅读0次

    Date类

    java.util.Date类,需要导包,表示时间点,精确到毫秒

    时间原点1970-1-1 00:00:00.000GMT,

    所以计算当前时间就是计算从时间原点到当前的经历了多少毫秒

    1

    如上,我们可以使用System.currentTimeMillis()获取系统当前经过的毫秒数,这里需要注意的是中国是东八区,会把时间增加8个小时

    简单介绍时间后,我们介绍Date的构造方法和成员方法

    Date类构造方法

    2

    看文档可以得到无参,年月日,年月日时分,年月日时分秒,以及date毫秒值初始化构造

    date()无参构造获得的是当前时间,如下,其中CST表示的是中国标准时间

    3

    Date(long date)构造,如下基于毫秒值给的构造,这里我们传入0,表示是时间原点,这里因为是东八区,所以+8小时

    4

    对于年月日时分秒这些,相信不难,我们就不一一详解

    Date类成员方法

    getTime()方法,获得实例的毫秒数

    5

    其他方法我们查看文档发现好多被Calendar替代,我们后面就会讲到


    DateFormat类

    是格式化的日期时间类,我们可以通过这个类将时间与字符串进行互相转换,我们查看文档,可以知道其是个抽象类,在java.text下,其父类为Format类,这个类有3个子类,一个是我们要讲的时间格式化类,另两个是字符串格式化类和数字格式化类

    6

    成员方法里2个比较常用的是format方法(下图的第一个),输入Date类,输出String类

    7

    还有parse方法,输入字符串,输出Date类型

    8

    由于是抽象类,我们无法直接使用

    9

    我们使用子类的SimpleDateFormat来实例,实例需要传入Pattern模式字符串

    相关事件字母模式y年,M月,d日,时H,分m,秒s(里面月和小时是大写)

    如输出"yyyy-MM-dd"就是格式化年月日-连接

    format方法

    10

    如上,我们给SimpleDateFormat传入模式字符串,然后尝试打印date(0)参数的日期,显示如上,即时间原点信息

    11

    当然我们pattern是可以自己设置的,如上

    parse方法

    parse方法使用,也是先实例化传入pattern字符串,然后调用parse方法,也许我们就信誓旦旦的去调用了,但是这里却出现了异常

    12

    这是其本身的问题,因为解析时调用java的文本异常解析类需要添加导入,感觉不是那么智能- -

    13

    还好intelliJ帮我们解决了,点击灯泡选择第一个即可,

    14

    这样我们就能正常解析了,我们这么繁琐的添加是因为我们如果输入了模式不匹配的字符串,就会能准确报出异常

    15

    如上,我们输入少了日,结果就会报出解析异常

    一个小练习,输入生日,计算当前过了多少天

    16

    Calendar日历类

    我们之前说了Date类很多方法jdk1.1以后都被Calendar类取代了,这里就是重点获得其方法

    17

    其在java.util下,是个抽象类,虽然也有子类,但是我们使用方法时常常使用

    Calendar rightNow = Calendar.getInstance();  来获得子类对象(多态写法)

    其方法和属性在文档里可以看到

    18

    如上,我们打印子类实例,可以看到其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]

    19

    Calendar类有4种常用方法,如上,获得日历的字段值,设置字段值,给字段值添加删除量,返回Date对象

    20

    我们需要注意的是使用Calendar类的字段,必须知道其字段值int类型,如上,年月日时分秒分别为1,2,5,10,12,13

    get方法

    21

    如上,这里需要注意的西方月份是0-11,我们这里需要转换+1

    22

    当然,日历类Calendar对于这些常量值是静态属性存储的,我们可以获得其值,通过IDE,因为有时候不记得具体多少

    23

    我们常常有要求获取一年第几天,这里也有专门的字段

    set方法

    24 25

    当然这里设置超出范围的值会自动转换,如上,我开门设置日为32号,当前为3月(老外-1)会自动变成4月1日

    26

    当然set方法也是支持多值的

    add方法

    27

    如上是增加方法,传入负值即递减

    28

    如上,1月1日(老外0月1日)减1天到去年的12月31日(老外11月31日)

    相关文章

      网友评论

          本文标题:21 时间日期类

          本文链接:https://www.haomeiwen.com/subject/xqefkhtx.html