该类在java.util包下。并且继承了Object类
该类有一个直接子类,为GregorianCalendar
该类是抽象类,即不能直接实例化,但是可以通过该类的子类GregorianCalendar对该类进行实例化
该类实现的接口有:Serializable、Cloneable、Comparable
该类为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
常用的日历字段:YEAR、MONTH、DAY_OF_MONTH、HOUR
该类提供了一个类方法,是静态方法,getInstance。getInstance返回的是Calendar对象,其日历字段已使用当前日期和时间初始化。格式如下
xxxxxxxxxx
Calendar rightNow = Calendar.getInstance();
该类有众多日期字段,且日期字段被静态修饰,即访问该类的日历字段可以通过类名直接访问
该类是抽象类,不能直接创建对象,但是该类的构造方法可以用于子类访问父类(该类)数据的初始化。该类的构造方法如下:
构造方法 | 作用 |
---|---|
protected Calendar() | 构造具有默认时区和默认FORMAT语言环境的日历 |
protected Calendar(TimeZone zone, Locale aLocale) | 构造具有指定时区和区域设置的时区 |
该类的成员方法大部分没有被静态修饰,所以我们在使用这些方法时,需要通过对象来使用。注意:该类创建对象的方式是通过该类的类方法来实现
Calendar类的练习
xxxxxxxxxx
package ch12;
import java.util.Calendar;
public class a_16_1测试 {
/*
Calendar 为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar 提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
*/
public static void main(String[] args) {
//获取对象。因为Calendar是抽象类,所以返回的其实是Calendar的子类对象
Calendar c = Calendar.getInstance(); //getInstance方法的返回值是Calendar类型。选中getInstance按Ctrl+B查看源码
System.out.println(c); //输出的是各种日历字段
System.out.println("-------------------");
//根据给定的日历字段,返回对应的值public int (int field)
int year = c.get(Calendar.YEAR); //通过get方法获取给定的日历字段
int month = c.get(Calendar.MONTH) + 1; //注意月是从0开始的,而0不建议用来代表1月,所以+1,则1代表1月
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日"); //输出2022年10月1日
}
}
Calendar的常用方法
方法名 | 说明 |
---|---|
public int get(int field) | 返回给定日历字段的值 |
public abstract void add(int field,int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |
public final void set(int year,int month,int date) | 设置当前日历的年月日 |
Calendar常用方法的练习
xxxxxxxxxx
package ch12;
import java.util.Calendar;
public class a_17_1测试 {
public static void main(String[] args) {
//获取日历对象
Calendar c = Calendar.getInstance();
//返回给定日历字段的值(对照组,这里是没做任何变动的输出)
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日"); //输出 2022年10月1日
System.out.println("----------------------");
//------------------------------------------------------------------------------------------------------------------
//public abstract void add(int field,int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段
//即利用add方法把任意的日历字段加上或减去某个时间值。如下2个案例
//实验组如下,即我们真正用代码演示的
//案例1:3年前的今天
c.add(Calendar.YEAR,-3); //年份-3。注意mount是系统自动加的,我们只需要写-3
int year2 = c.get(Calendar.YEAR);
int month2 = c.get(Calendar.MONTH) + 1;
int date2 = c.get(Calendar.DATE);
System.out.println(year2 + "年" + month2 + "月" + date2 + "日"); //输出2019年10月1日
System.out.println("-----------------------");
//案例2:10年后的5天前
c.add(Calendar.YEAR,10);
c.add(Calendar.DATE,-5);
int year3 = c.get(Calendar.YEAR);
int month3 = c.get(Calendar.MONTH) + 1;
int date3 = c.get(Calendar.DATE);
System.out.println(year3 + "年" + month3 + "月" + date3 + "日"); //输出2029年9月26日
System.out.println("------------------------");
//-----------------------------------------------------------------------------------------------------------------
//public final void set(int year,int month,int date) 设置当前日历的年月日
//即利用set方法
c.set(2022,5,20);
int year4 = c.get(Calendar.YEAR);
int month4 = c.get(Calendar.MONTH);//这行不要额外写+1哦
int date4 = c.get(Calendar.DATE);
System.out.println(year4 + "年" + month4 + "月" + date4 + "日"); //输出2022年5月20日
}
}
二月天案例
xxxxxxxxxx
package ch12;
import java.util.Calendar;
import java.util.Scanner;
public class a_18_0二月天案例 {
/*
需求:获取任意一年的二月有多少天
思路:
1、键盘录入任意的年份
2、设置日历对象的年、月、日
(1)年:来自于键盘录入
(2)月:设置为3月,月份是从0开始的,所以设置的值实际就是2
(3)日:设置为1日
3、3月1日往前推一天,就是2月的最后一天
4、获取这一天输出即可
*/
public static void main(String[] args) {
while (true) { //这个只是循环,不加循环也行
//键盘录入任意的年份
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份");
int year = sc.nextInt();
//设置日历对象的年、月、日
Calendar c = Calendar.getInstance(); //得到日历对象
c.set(year, 2, 1); //实际就是设置了为3月1日
//3月1日往前推一天,就是2月的最后一天
c.add(Calendar.DATE, -1);
//获取这一天输出即可
int date = c.get(Calendar.DATE);
System.out.println(year + "年的2月份有" + date + "天");
System.out.println("-------------------");
}
}
}