Java使用Calendar类在控制台输出指定年份和月份的日历

要输出指定年份和月份的日历首先要获知指定月有几天,指定月有几个星期,还有指定月的第一天和最后一天是星期几。

需要注意的是:在Calendar类中,星期日到六分别用1~7表示,而月份是从0开始计的,即一月对应0。

        /**
	 * 获取某月中的某天是星期几
	 * 
	 * @return
	 */
	public static int weekDay(Calendar cal)
	{
		int weekday = cal.get(Calendar.DAY_OF_WEEK);
		if (weekday == 1)// 西方星期日为第一天,星期一为第二天
			weekday = 7;
		else
			weekday -= 1;
		return weekday;
	}

该日历主要分三部分显示:第一个星期,中间几个星期,最后一个星期。因为每个星期有7天,第一个星期和最后一个星期可能不会显示完,而中间的几个星期是可以将七天都显示完全的。

第一个星期要注意在1号之前的星期几显示空格,中间的几个星期日期依次累加即可,最后一个星期只显示到最后一天。

如果第一个星期是从星期天开始的,则将其归到中间的几个星期一起显示,否则单独处理。

如果最后一个星期在该月只有星期天一天,则只显示这天即可,否则日期累加显示到最后一天。

由于Calendar是抽象类,故实例化使用getInstance()方法,也可采用实例化子类GregorianCalendar

(该显示指定年月的日历类的类名为MyCalerdar)

        public void calendar(int year, int month)
	{
		Calendar firstcal = Calendar.getInstance();
		Calendar lastcal = Calendar.getInstance();
		System.out.println("\t\t" + year + "年" + month + "月");
		System.out.println("日\t一\t二\t三\t四\t五\t六");
		firstcal.set(year, month - 1, 1);// 所求月的第一天
		int dateofmonth = firstcal.getActualMaximum(Calendar.DATE);// 获取该月的天数
		lastcal.set(year, month - 1, dateofmonth);// 所求月的最后一天

		// 获取所求月第一天是星期几,输出是中文的而不是数字的
		// SimpleDateFormat fm = new SimpleDateFormat("E");
		// System.out.println(fm.format(firstcal.getTime()));

		int weekofmonth = firstcal.getActualMaximum(Calendar.WEEK_OF_MONTH);// 获取该月的星期数
		String[][] week = new String[weekofmonth][7];
		int firstday = MyCalendar.weekDay(firstcal); // 获取所求月第一天是星期几
		int lastday = MyCalendar.weekDay(lastcal); // 获取所求月最后一天是星期几
		int m = 1, f = 1;// f的作用主要是判断是否需要将第一个星期归到中间几个星期一起计算
		int j;
		// 第一个星期
		if (firstday == 7)
		{
			f = 0;
 		} else
		{
			for (j = 0; j < firstday; j++)
			{
				week[0][j] = " ";
				System.out.print(week[0][j] + "\t");
			}
			for (j = firstday; j < 7; j++)
			{
				week[0][j] = m + "";
				m++;
				System.out.print(week[0][j] + "\t");
			}
			System.out.println();
		}
		// 中间的几个星期
		for (int i = f; i < weekofmonth - 1; i++)
		{
			for (j = 0; j < 7; j++)
			{
				week[i][j] = m + "";
				m++;
				System.out.print(week[i][j] + "\t");
			}
			System.out.println();
		}
		// 最后一个星期
		if (lastday == 7)
		{
			week[weekofmonth - 1][0] = m + "";
			System.out.print(week[weekofmonth - 1][0] + "\t");
		} else
		{
			for (j = 0; j <= lastday; j++)
			{
				week[weekofmonth - 1][j] = m + "";
				m++;
				System.out.print(week[weekofmonth - 1][j] + "\t");
			}
		}
	}
主方法(类名为MyCalendar):

        public static void main(String[] args)
	{
		MyCalendar mycal = new MyCalendar();
		Scanner input = new Scanner(System.in);
		System.out.println("<<<<<<<<<<<<<<万年历>>>>>>>>>>>>>>");
		System.out.print("请输入年份:");
		int year = input.nextInt();
		System.out.print("请输入月份:");
  		int month = input.nextInt();
		mycal.calendar(year, month);
	}

输入:2015年9月

输出:

输入:2015年2月

输出:


  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值