java中Calendar类包含有获取和设置时间/日期的方法;此方法为抽象方法,无法直接实例化,所以可以通过子类或工厂模式方法获取实例化对象。
首先创建Calendar对象
方法1:工厂模型getInstance()方法获取对象(常用)
Calendar c = Calendar.getInstance();
方法2:使用GregorianCalendar子类获取实例化对象
Calendar c = new GregorianCalendar();
打印日期我们需要从1号开始打印,所以首先就需要吧日期设置到1号,可以使用Calendar里的set(int field, int value)方法进行设置;第一个参数需要传递的是我们要修改的年Calendar.YEAR/月Calendar.MONTH/日Calendar.DATE等时间/日期,第二个参数就是我们要设置的值;我们还可以给出提示信息
Calendar c = Calendar.getInstance();
c.set(Calendar.DATE, 1);
System.out.println("========================" + c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) +1) + "月========================");
System.out.println("日\t一\t二\t三\t四\t五\t六");
我们希望1号是在本月对应的星期下,所以我们可以通过获取星期数,然后打印对应的空格实现;通过get(int field)方法获取星期数Calendar.DAY_OF_WEEK;java中的1代表的星期日,2代表的是星期一;以此类推
Calendar c = Calendar.getInstance();
c.set(Calendar.DATE, 1);
System.out.println("========================" + c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) +1) + "月========================");
System.out.println("日\t一\t二\t三\t四\t五\t六");
int week = c.get(Calendar.DAY_OF_WEEK);
//打印空格
for(int i = 1;i < week;i++) {
System.out.print(" \t");
}
空格打印完毕后,就可以打印日期,而且希望打印的日期都是对应自己的星期数,所以我们就可以对week变量进行操作来完成换行;但是要打印多少次呢?Calendar里存在方法getActualMaximum(int field)方法已经封装好了天数可以供我们直接调用;每次打印后都需要使日期增加1,这时可以使用add(int field, int amount)方法,第一个参数代表我们要修改的年Calendar.YEAR/月Calendar.MONTH/日Calendar.DATE等时间/日期,第二个参数代表我们要增加的量,正数是做加法,负数做减法
Calendar c = Calendar.getInstance();
c.set(Calendar.DATE, 1);
System.out.println("========================" + c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) +1) + "月========================");
System.out.println("日\t一\t二\t三\t四\t五\t六");
int week = c.get(Calendar.DAY_OF_WEEK);
//打印空格
for(int i = 1;i < week;i++) {
System.out.print(" \t");
}
//打印日期
for(int i = 1;i <= c.getActualMaximum(Calendar.DAY_OF_MONTH);i++) {
System.out.print(c.get(Calendar.DATE) + "\t");
c.add(Calendar.DATE, +1);
//到达7表示一个星期结束
if(week == 7) {
//实现换行
System.out.println();
week = 0;
}
week++;
}
运行后的结果如下图所示
大家如果有更好的方法,可以一起交流学习进步哟!