Java 打印某年某月的月日历


import java.util.Calendar;
public class cal {
	private int year;
	 private int month;
	 public cal(){}
	 public cal(int year ,int month){
	  this.year = year;
	  this.month = month;
	 }
	 public int WhatWeekDay(){
		 
		  //创建Calendar对象
		  Calendar calendar = Calendar.getInstance();
		  //设置calendar对象的年
		  calendar.set(Calendar.YEAR,this.year);
		  //设置calendar对象的月份 ,因为此处的月份是从零开始(0-11表示1-12月),所以我们输入的数值要减去1才是正确的月份
		  //(比如输入8月,接收数值 8 ,但是因为Calendar的特殊月份计数, 8 代表的是"9月",所以减去 1 为 7 ,才是正确的 8月)
		  calendar.set(Calendar.MONTH,this.month-1);
		  //设置日期为打印月的第一天
		  calendar.set(Calendar.DATE, 1);
		  //用get方法获取这一天是周几
		  int whatDay = calendar.get(Calendar.DAY_OF_WEEK);
		  //Calendar从周日开始到周六结束,用1-7表示,这里为了方便,把其数值减 1 ,得到周日到周六为 0 - 6 只需特殊处理周日即可
		  return whatDay-1; //得出这个月的第一天是周几
		 }
	 public int WhatDayOfMonth(){
		  //实例化Calendar对象
		  Calendar calendar = Calendar.getInstance();
		  //设置为打印年打印月的下一个月(参考WhatWeekDay方法中的月份注释 ,这里没减1)第一天.
		  //例:输入 2018 2 其实为2018年的3月
		  calendar.set(this.year,this.month,1);
		  //使上面的日期退一天 得到打印月
		  calendar.add(Calendar.DATE,-1);
		  //获取日的数值
		  int monthDay =calendar.get(Calendar.DATE);
		  return monthDay;
		 }
		 
		 public int getYear() {
		  return year;
		 }
		 
		 public void setYear(int year) {
		  this.year = year;
		 }
		 
		 public int getMouth() {
		  return month;
		 }
		 
		 public void setMouth(int mouth) {
		  this.month = mouth;
		 }
		
	public static void main(String[] args) {
		 int year=Integer.parseInt(args[1]);
		  int month =Integer.parseInt(args[0]);
		  //创建日历工具类对象,并用带参构造初始化
		  cal dt = new cal(year,month);
		  //实例化打印工具类对象
		  PrintDayTool pd = new PrintDayTool();
		  String[] s=new String[] {
				  "January","February","March","April","May","June","July","August","September","October","November","December"  
		  };//建立12个月份的string数组
		  System.out.println(s[month-1]+"   "+year);//打印英文月份和数字年份
		
		  //调用打印工具类对象的printDay方法,传入年和月份
		  pd.printDay(dt.WhatDayOfMonth(),dt.WhatWeekDay());
		

}
	}


public class PrintDayTool {
	 public void printDay(int daysOfMouth,int whatDay){
		  int count = 0; //定制计数标记
		  System.out.print("Su\tMo\tTu\tWe\tTh\tFr\tSa");
		  //j从1开始 到这个月的天数结束
		  for(int j = 1 ; j <= daysOfMouth ; j ++){
		   count++;
		   //每打印七天就换行
		   if(count % 7 == 1){
		    System.out.print("\n");
		   }
		   //如果这月的第一天是周日就把它置为0 不打印额外制表符
		   if(whatDay==7)
		    whatDay = 0;
		   //这个月的第一天是周几就额外打印几次制表符
		   while (whatDay>0){
		    System.out.print("\t");
		    whatDay--;
		    count++;
		   }
		   //打印天数
		   System.out.print(j+"\t");
		  }
		  //打印完日历换行
		  System.out.println("\n");
		 }
		
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值