截止到jdk8,java中一共有两套日期时间系统,本篇文章详解java存在初期就有的一套日期时间系统——Date类和Calendar类。
Date类是java中经典的日期时间类。
• 使用无参数的构造方法创建出来的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小时制的。
• 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类可以格式化时间例如“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);
细心的人应该发现了Date类中很多方法都已经被弃用了,他们就是被更好的Calendar类中的某些方法所替换掉了。Calendar类的出现是为了弥补Date类在设计之初的缺陷,比如说year差了1900……
通过源码我们可以看出来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”,以此类推) |
方法就是add (int field, int amount)
field
- 日历字段。
amount
- 要添加到该字段的日期或时间的数量。
首先使用getTime()方法,将Calendar类转化成Date类,就可以使用SimpleDateFormat来格式化输出了