Calendar类:(日历)
用法:Calendar是一个抽象类;不能实例化(不能new),使用时通过子类完成实现,不过这个类不需要创建子类对象,而是通过静态方法直接获取;
获取对象方法:getInstance();
getInstance()方法:官方文档:使用默认时区和语言环境获得一个日历。
getInstance(Locale aLocale)
使用默认时区和指定语言环境获得一个日历。
getInstance(TimeZone zone)
使用指定时区和默认语言环境获得一个日历。
getInstance(TimeZone zone, Locale aLocale)
使用指定时区和语言环境获得一个日历。
示例:
public class Demo1 { public static void main(String[] args) { Calendar ca=Calendar.getInstance();//创建一个日历的对象ca;通过getInstance()方法创建日历对象, System.out.println(ca); /*输出结果: * java.util.GregorianCalendar[time=1553060892101,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=2019,MONTH=2, * WEEK_OF_YEAR=12,WEEK_OF_MONTH=4,DAY_OF_MONTH=20,DAY_OF_YEAR=79,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3, * AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=48,SECOND=12,MILLISECOND=101,ZONE_OFFSET=28800000,DST_OFFSET=0] */ /*输出结果我们可以看出,里边有很多东西,我们可以大致辨认出第三行有YEAR=2019,MONTH=2, * WEEK_OF_YEAR=12,WEEK_OF_MONTH=4,DAY_OF_MONTH=20,DAY_OF_YEAR=79, * 意思是2019年,3月(Calendar中默认的是0-11月,所以实际月份要加1),一年的第12周,一个月的第四个星期,一个月的第20天,一年的第79天,一周的第四天(美国默认一周的周日是一星期的开始) * */ } }
为了把上面运行结果显示出来,只显示我们想要的,会用到一些方法:
get方法:
import java.util.Calendar; public class Demo2 { public static void main(String[] args) { Calendar ca=Calendar.getInstance(); int year=ca.get(Calendar.YEAR);//获得ca日历年份 int month=ca.get(Calendar.MONTH)+1;//获得月份,日历默认月份0-11月,所以要加1才是是实际月份; int day=ca.get(Calendar.DAY_OF_MONTH);//获得天数 System.out.println(year+"年"+month+"月"+day+"日");//2019年3月20日 } }
set()方法:
public class Demo3 { public static void main(String[] args) { Calendar ca=Calendar.getInstance();//创建日历ca Date d=ca.getTime();//getTime()方法: 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 System.out.println(d);//输出时间:Wed Mar 20 14:35:19 CST 2019 ca.set(1996, 6, 27);//set(year, month, date);设置日历的年月日 Date d1=ca.getTime(); System.out.println(d1);//Sat Jul 27 14:38:23 CST 1996 } /*可以看出日历的时间变了,set方法将日历的时间改为了1996年6月27日*/ }
add方法:官方资料:add(int field, int amount)
根据日历的规则,为给定的日历字段添加或减去指定的时间量。
import java.util.Calendar; public class Demo { public static void main(String[] args) { Calendar ca=Calendar.getInstance(); getdate(ca);//2019-2-20 ca.add(Calendar.YEAR, 1);//年份加一 getdate(ca);//2020-2-20 ca.add(Calendar.MONTH, 4);//月份加四 getdate(ca);//2020-7-20 ca.add(Calendar.DAY_OF_MONTH, -10);//日期减十天 getdate(ca);//2020-7-10 } private static void getdate(Calendar ca) { // 创建显示日期方法,将日历变为容易观察的样式,方便上面调用查看 System.out.println(ca.get(Calendar.YEAR)+"-"+(ca.get(Calendar.MONTH)+1)+"-"+ca.get(Calendar.DAY_OF_MONTH)); } }
Calendar类综合练习:
计算闰年:
import java.util.Calendar; import java.util.Scanner; public class Demo4 { public static void main(String[] args) { Calendar c=Calendar.getInstance();//getInstance()方法: System.out.println("请输入年份:"); int year=new Scanner(System.in).nextInt(); c.set(year, 2, 1);//set()设置日历字段年月日,在日历中是0-11月,所以这里写的是二月,实际日期是3月一日,本句中设置日历c为3月1日; c.add(Calendar.DAY_OF_MONTH, -1);//add根据日历的规则,为指定日历字段添加或减去指定的时间量,本句中给c日历当前日期减去一天; int day=c.get(Calendar.DAY_OF_MONTH);//定义变量day接收c当前的日期;DAY_OF_MONTH指定一个月中的某天 if(day==29){ System.out.println("是闰年"); }else{ System.out.println("不是闰年"); } } }
运行结果: