Calendar类

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

 求出今天距离209911日还有多少小时

1.获取当前时间对应的天数

2.获取209911日对应的天数

3.两个时间相减(209911日的天数 –当前时间天数)

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天
原文地址:https://www.cnblogs.com/qq1312583369/p/10082421.html