Java日期时间类详解

        截止到jdk8,java中一共有两套日期时间系统,本篇文章详解java存在初期就有的一套日期时间系统——Date类和Calendar类。

Date类(java.util)

Date类是java中经典的日期时间类。

Date类构造方法

使用无参数的构造方法创建出来的Date类默认初始化为操作系统当前的时间


如果要创建一个1999年8月13日的一个Date类对象,我们可以使用:

Date date = new Date(1999, 8, 13);
System.out.println(date);

而控制台输出的信息是

 

这个结果显然不是我们所要的,为什么会出现这个问题呢?

【注意】

在Date类中有两个我们需要注意的点:year和month。

year:我们要得到的年份在初始化中应该减去1900,才是正确的。

month:我们正常认为的月份是从1-12,而Date类中的month是从0开始计算的,也就是0-11。

 修改完之后的代码为:

Date date = new Date(1999-1900, 7, 13);
System.out.println(date);

得到了我们所要的1999年8月13日。


带着时分秒的构造方法使用是一样的,注意一点Date类中的时分秒都是24小时制的。

Date类中常用方法

 • getYear() 用于获取当前Date对象的年份。需要+1900

 • getMonth() 用于获取当前Date对象的月份。需要+1

 • getDate() 用于获取当前Date对象的日期

 • getDay() 用于获取当前Date对象是星期几。注意:星期天返回的不是7,而是0

 • getHours() 用于获取当前Date对象的小时

 • getMinutes() 用于获取当前Date对象的分钟

 • getSeconds() 用于获取当前Date对象的

• getTime() 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT(格林尼治标准时间)的毫秒数。

【拓展】

在System这个类中,有一个静态方法currentTimeMillis(),可以达到相同的效果。我们可以使用这个方法来求出一个,或多个方法执行所耗费的时长(毫秒):

long begin = System.currentTimeMillis();
method();
long end = System.currentTimeMillis();
System.out.println("耗费时长" + (end - begin) + "毫秒");

SimpleDateFormat类格式化时间

SimpleDateFormat类可以格式化时间例如“yyyy-MM-dd hh:mm:ss SSS”

yyyy年

MM月

dd日

hh时

mm分

ss秒

SSS毫秒

具体用法:

Date nowTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS");
String nowTimeString = sdf.format(nowTime);
System.out.println(nowTimeString);

Calendar类(java.util)

        细心的人应该发现了Date类中很多方法都已经被弃用了,他们就是被更好的Calendar类中的某些方法所替换掉了。Calendar类的出现是为了弥补Date类在设计之初的缺陷,比如说year差了1900……

Calendar类初始化

        通过源码我们可以看出来Calendar类是一个抽象类,所以我们无法直接new。这里我们只需要调用Calendar类中的静态方法getInstance(),我们要清楚的是这里得到的其实是Calendar类的子类,但为了方便描述,我们就简称为Calendar类的对象。

        调用set()方法,来单独根据字段设置相应的年月日时分秒

获取年月日时分秒

        Calendar类中的get方法,集合了Date类中的getYear(),getMonth()……我们只需要向get方法中传入不同的参数字段,就可以返回我们所要的年月日时分秒。

常用的字段:

Calendar.YEAR
Calendar.MONTH   月(0-11)
Calendar.DATE / Calendar.DAY_OF_MONTH
Calendar.HOUR 时(12小时制)
Calendar.HOUR_OF_DAY  时(24小时制)
Calendar.MINUTE 
Calendar.SECOND
Calendar.DAY_OF_WEEK  星期(星期天是“1”,星期一是“2”,以此类推)

 

Calendar类时间计算功能

        方法就是add (int field, int amount)

   field - 日历字段。

   amount - 要添加到该字段的日期或时间的数量。

Calendar类实现日期时间格式化输出

        首先使用getTime()方法,将Calendar类转化成Date类,就可以使用SimpleDateFormat来格式化输出了

Guess you like

Origin blog.csdn.net/qq_45933810/article/details/120797321