Calendar类的基本概念
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。Calender类是一个抽象类,该类将所有可能用到的时间信息封装为静态成员变量,方便获取。在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance()方法创建即可。Calendar类在Java中用于处理日期。Calendar类提供了增加和减少天数、月数和年数的简便方法。它还提供了很多与日期有关的细节(这一年的哪一天。哪一周。等等)
Calendar类的常用方法
1.获取时间
// 使用默认时区和语言环境获得一个日历 Calendar cal = Calendar.getInstance(); // 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1 System.out.println("年:" + cal.get(Calendar.YEAR)); System.out.println("月:" + (cal.get(Calendar.MONTH) + 1)); System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH)); System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY)); System.out.println("分:" + cal.get(Calendar.MINUTE)); System.out.println("秒:" + cal.get(Calendar.SECOND));
// 星期日为一周的第一天输出为 1,星期一输出为 2,以此类推
System.out.println("一周的第几天: " + (cal.get(Calendar.DAY_OF_WEEK)-1));
System.out.println("一月中的第几天: " + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("一年的第几天: " + cal.get(Calendar.DAY_OF_YEAR));
2.设置时间
月份的下标从 0 开始,设置时同样需要注意当前月份减一,比如我们设置为 12月 31 日当晚的倒计时的最后一秒: 2018-12-31 23:59:59
Calendar cal = Calendar.getInstance(); // 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1 // cal.set(year, month, date, hourOfDay, minute, second); cal.set(2018, 11, 31, 23, 59, 59);
System.out.println(cal.getTime());
或者单个字段进行设置:
// 6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2018); cal.set(Calendar.MONTH,11); cal.set(Calendar.DAY_OF_MONTH, 31); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); System.out.println(cal.getTime());
时间计算
add方法:
比如在12月31日当晚最后一秒,add 一秒:
Calendar cal = Calendar.getInstance(); System.out.println(cal.getTime()); cal.set(2018, 11, 31, 23, 59, 59); cal.add(Calendar.SECOND, 1); System.out.println(cal.getTime());
打印结果,日期会自动进入下一天:
Fri Dec 07 16:18:47 CST 2018
Tue Jan 01 00:00:00 CST 2019
再比如 1 月 31 日时,月份减一
Calendar cal = Calendar.getInstance(); cal.set(2019, 0, 31, 8, 0, 0); System.out.println(cal.getTime()); cal.add(Calendar.MONTH, -1); System.out.println(cal.getTime());
打印结果,为12月31日
Thu Jan 31 08:00:00 CST 2019
Mon Dec 31 08:00:00 CST 2018
实例1
求出自己已经出生多少天
1.获取当前时间对应的天数
2.获取自己出生日期对应的天数
3.两个时间相减(当前时间天数 – 出生日期天数)
package Demo01; import java.util.Calendar; public class Demo02 { public static void main(String[] args) { //获取当前系统时间毫秒值 long currenttime=System.currentTimeMillis(); //获取当前日历类对象 Calendar c=Calendar.getInstance(); c.set(1994, 9,19); //date d=c.getTime(); //long birth=d.getTime(); //这两步可以简化为 long birth=c.getTime().getTime(); //计算时间差,(出生时毫秒值-当前毫秒值)->秒->分->时->天 int day=(int)((currenttime-birth)/1000/60/60/24); System.out.println("我出生已经"+day+"天"); } }
打印结果
我出生已经8814天
实例2
求出今天距离2099年1月1日还有多少小时
1.获取当前时间对应的天数
2.获取2099年1月1日对应的天数
3.两个时间相减(2099年1月1日的天数 –当前时间天数)
package Demo01; import java.util.Calendar; public class Demo02 { public static void main(String[] args) { //获取当前系统时间毫秒值 long now=System.currentTimeMillis(); //获取当前日历类对象 Calendar c=Calendar.getInstance(); c.set(2099, 0,1); long future=c.getTime().getTime(); //计算时间差 int day=(int)((future-now)/1000/60/60); System.out.println("距2099年一月一日还剩"+day+"小时"); } }
打印结果
距2099年一月一日还剩701880天