目录
一、Calendar 类概述
Calendar常常被称为日历类
可以看出Calender是一个抽象类
它有很多日历字段,而且都是用静态修饰的
二、Calendar类的构造方法
他是抽象类不能直接创建对象,但是他的构造方法可以用于子类访问父类数据的初始化
三、Caleadar类的基本使用
跟进getInstance()方法
返回值是Calender类型,是个抽象类,所以返回的一定是他的子类对象
是通过这个方法返回的,我们再跟进这个方法
我们可以看到这个方法的返回值也是Calendar
继续往下看
定义了一个Calendar的变量
继续往下看
然后发现cal在这里赋值了,这些都是用Calendar的子类创建对象来赋值的
最后返回了一个cal
代码演示:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();//多态的形式
System.out.println(calendar);
}
}
输出:
java.util.GregorianCalendar[time=1628219265710,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=7,WEEK_OF_YEAR=32,WEEK_OF_MONTH=1,DAY_OF_MONTH=6,DAY_OF_YEAR=218,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=7,SECOND=45,MILLISECOND=710,ZONE_OFFSET=28800000,DST_OFFSET=0]
其中有些是可以看懂的,里边有年月日什么的,注意这里的月,比我们当前的月少1,是因为在这里月是从0开始的
输出成这样很显然很不利用阅读
我们应该找一个方法
我们可以看到它的get方法
代码演示:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();//多态的形式
//public int get(int field)根据给的日历字段返回对应的值
int year = calendar.get(Calendar.YEAR);
//YEAR是Caleader类中的日历字段,都是用static修饰的,用类名直接调用字段
int month = calendar.get(Calendar.MONTH) + 1;
//因为月在这里默认从0开始的,所以要得到正确的月需要加1
int date = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
}
}
输出:
2021年8月6日
四、Calendar的常用方法
1.public abstract void add(int filed,int amount)
代码演示:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();//多态的形式
//public int get(int field)根据给的日历字段返回对应的值
int year = calendar.get(Calendar.YEAR);
//YEAR是Caleader类中的日历字段,都是用static修饰的,用类名直接调用字段
int month = calendar.get(Calendar.MONTH) + 1;
int date = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
//public abstract void add(int field,int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段
calendar.add(Calendar.YEAR,-3);//需求:三年前的今天
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH) + 1;
int date1 = calendar.get(Calendar.DATE);
System.out.println(year1 + "年" + month1 + "月" + date1 + "日");
}
}
虽然这是一个抽象方法,抽象类不能直接实例化,但是既然可以new出Calendar对象,那么他的子类或者孙子类里边肯定重写了这个抽象方法
输出:
2021年8月6日
2018年8月6日
2.public final void set(int year,int month,int date)
代码演示:
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();//多态的形式
//public int get(int field)根据给的日历字段返回对应的值
int year = calendar.get(Calendar.YEAR);
//YEAR是Caleader类中的日历字段,都是用static修饰的,用类名直接调用字段
//public abstract void add(int filed,int amount):设置当前日历的年月日
calendar.set(2021,11,11);
int month = calendar.get(Calendar.MONTH) + 1;
int date = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");
}
}
输出:
2021年12月11日