java学习笔记17(Calendarl类)

时间:2023-03-09 06:20:08
java学习笔记17(Calendarl类)

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("不是闰年");
}
}
}

运行结果:

java学习笔记17(Calendarl类)