Calendar 是一个抽象日历类, 无法通过直接实例化得到对象。因此, Calendar 提供了一个方法 getInstance(),来获得一个Calendar对象, 得到的 Calendar 由当前时间初始化。
//获得当前地区日历子对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
以上输出结果为一个日历列表,其中的属性都可以通过方法取出来,如下
java.util.GregorianCalendar[time=1655993480091,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=5,WEEK_OF_YEAR=26,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=174,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,MINUTE=11,SECOND=20,MILLISECOND=91,ZONE_OFFSET=28800000,DST_OFFSET=0]
这种方法和上边的方法完全相同
//获得当前地区日历子对象
Calendar calendar = new GregorianCalendar();
System.out.println(calendar);
常量字段 | 说明 |
---|---|
Calendar.ERA | ERA表示纪元,只能为0或1。0表示BC(“before Christ”,即公元前);1表示AD(拉丁语“Anno Domini”,即公元)。 |
Calendar.YEAR | 表示年份 |
Calendar.MONTH | 表示月份,需要加1,因为0表示1月,1表示2月,以此类推 |
Calendar.HOUR | 小时(12小时制) |
Calendar.HOUR_OF_DAY | 一天中第几个小时(24小时制) |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.MILLISECOND | 毫秒 |
Calendar.DAY_OF_YEAR | 一年中第几天 |
DAY_OF_MONTH | 一月中第几天 |
DAY_OF_WEEK | 一周中第几天,注意,周日是1,周一是2,… |
Calendar.DATE | 一月中第几天,同DAY_OF_MONTH的值是一样的 |
Calendar.DAY_OF_WEEK_IN_MONTH | 当月内一周中的某天的序号 |
Calendar.WEEK_OF_YEAR | 一年中的星期数,即本年中第几个星期 |
Calendar.WEEK_OF_MONTH | 当前月中的星期数,即本月中第几个星期 |
Calendar.DAY_OF_WEEK_IN_MONTH | 当前月中的第几个星期 |
Calendar.AM_PM | AM_PM是在中午之前还是在中午之后,在中午12点之前返回0,在中午12点(包括12点)之后返回1 |
Calendar.JANUARY | 1月 |
Calendar.FEBRUARY | 2月 |
Calendar.MARCH | 3月 |
Calendar.APRIL | 4月 |
Calendar.MAY | 5月 |
Calendar.JUNE | 6月 |
Calendar.JULY | 7月 |
Calendar.AUGUST | 8月 |
Calendar.SEPTEMBER | 9月 |
Calendar.OCTOBER | 10月 |
Calendar.NOVEMBER | 11月 |
Calendar.DECEMBER | 12月 |
public static void fun2(){
public static void main(String[] args){
Calendar c=Calendar.getInstance();
//设置月份到十月份
//c.set(Calendar.MONTH,9);
//设置一个日期2022-2-20
c.set(2022,2,20);
//获取设置的日期
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;
int day=c.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+day+"日");
}
}
显示结果:
2022年3月20日
获取日历字段的值 是int类型
public static void fun1(){
public static void main(String[] args){
Calendar c=Calendar.getInstance();
//获取当前的年月日
int year=c.get(Calendar.YEAR);
//获取到的月份比真实月份小1,要进行+1操作
int month=c.get(Calendar.MONTH)+1;
int day=c.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+day+"日");
}
}
显示结果:
2022年3月20日
日历偏移量
public static void fun3(){
public static void main(String[] args){
//获取当前日历子类对象
Calendar c=Calendar.getInstance();
//对于向前日期往后偏移310天,如果添上负号-,则代表往前偏移
c.add(Calendar.DAY_OF_MONTH,310);
//获取偏移后的年份
int year=c.get(Calendar.YEAR);
//偏移后的月份,因为获取到的月份比真实月份小1的,所以要+1操作
int month=c.get(Calendar.MONTH)+1;
//获取偏移后的月份日数
int day=c.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+day+"日");
}
}
显示结果:
2020年1月24日
package cn.chang.Demo2;
import java.util.Calendar;
//判断某一年份是否为闰年
思想 先设置某一年的三月一号 然后往前偏移一天,获取偏移后月份(也就是二月)的天数和28比较,相等是平年,不相等就是闰年
public class LeapYear {
public static void main(String[] args){
Calendar c=Calendar.getInstance();
//设置一个年份的三月一号,这里以2019年为例
c.set(2019,2,1);
//往前偏移一天
c.add(Calendar.DAY_OF_MONTH,-1);
//get 获取偏移后月份的天数
int day=c.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
if(day==28){
System.out.println("该年是平年");
}else{
System.out.println("该年是闰年");
}
}
}
显示结果:
28
该年是平年