Calendar类的常见方法与基本使用
什么是Calendar类
由于java.util.Date设计中存在的一些问题,因此从jdk1.1之后,jdk中新增了java.util.Calendar类用于对日期类型处理;Calendar类由于是一个抽象类,因此无法直接实例化,如果需要获得Calendar的实例可以使用如下方法:
Calendar c = Calendar.getInstance();
Calendar常见方法
- get(int field) 获取指定字段的值 ,如 c.get(Calendar.YEAR) 获得 2020
- set(int field,int value) 设置指定字段的值 ,如 c.set(Calendar,YEAR,2021)
- getActualMaximum(int field) 获取指定字段具备的最大值
- getTime() 获取当前日历所表示的java.util.Date对象
- getTimeInMillis() 获取当前日历所表示时间的毫秒数(从1970年1月1日 0时0分0秒开始)
- …
实例代码
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
// c.set(Calendar.YEAR, 2021);
//设置日期为 1
c.set(Calendar.DAY_OF_MONTH,1);
System.out.println(c);
//获取当前日历的所表示的年份
int year = c.get(Calendar.YEAR);
System.out.println(year);
//获取给定的日历所表示的月份
int month = c.get(Calendar.MONTH);
System.out.println(month);
//获取给定的日历所表示的日期(本月的第几天)
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//获取给定的日历所表示的小时
int hour = c.get(Calendar.HOUR_OF_DAY); //24小时制 HOUR:12小时制
System.out.println(hour);
//获取给定的日历所表示的分钟
int min = c.get(Calendar.MINUTE);
System.out.println(min);
//获取给定的日历所表示的秒钟
int second = c.get(Calendar.SECOND);
System.out.println(second);
//获取今天是星期几
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println("当前是这周的第几天:"+week);
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.YEAR, 2022);
c2.set(Calendar.MONTH, 7);
c2.set(Calendar.DAY_OF_MONTH,15);
System.out.println(c2);
//获取指定字段具备最大值,获得最大月份
int max = c2.getActualMaximum(Calendar.MONTH);
System.out.println(max);
//获取当前日历所表示月份的最大天数
int days = c2.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(days);
GregorianCalendar gc = new GregorianCalendar();
//判断给定的年份是否是闰年
boolean leapYear = gc.isLeapYear(2020);
System.out.println(leapYear);
//将日历对象转换为java.util.Date
Date date = gc.getTime();
System.out.println(date);
}
相关练习
可运用Calendar类输出一个动态日历
动态日历相关代码
/**
* 动态日历
*
* @author PJW
*
*/
public class ArrayDate {
private GregorianCalendar gc = new GregorianCalendar();
private Calendar c = Calendar.getInstance();
public void arryCanlendar(int year,int month) {
//计数器来通过一行输出数 满7换行
int count = 0;
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month-1);
c.set(Calendar.DAY_OF_MONTH,1);
int day = c.get(Calendar.DAY_OF_WEEK);
//通过得到当月第一天是当月第一周的第几天
//day-1就是前面输出的空格数
for (int i = 0; i < day-1; i++) {
System.out.print("\t");
count++;
}
Month(count);
}
public void Month(int count) {
for (int i = 1; i <= c.getActualMaximum(Calendar.DAY_OF_MONTH); i++) {
System.out.print(i+"\t");
count++;
//换行语句
if(count%7 == 0) {
System.out.println();
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
System.out.println("===========【"+year+"年"+month+"月"+"】========================");
System.out.println("日\t一\t二\t三\t四\t五\t六");
new ArrayDate().arryCanlendar(year, month);
}
}
输出效果
可以自行加上UI,实现一个日历页面