目录
- 一、Calendar 类概述
- 二、Calendar类的构造方法
- 三、Caleadar类的基本使用
- 四、Calendar的常用方法
- 1.public abstract void add(int filed,int amount)
- 2.public final void set(int year,int month,int date)
一、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开始的,所以要得到正确的月需要加1int 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日