Java Calendar实现控制台日历

	public static void main(String[] args) throws IOException {
		//初始化日历对象
		Calendar calendar = Calendar.getInstance();
		//当前日期
		int today = calendar.get(Calendar.DAY_OF_MONTH);
		//当前月份
		int month = calendar.get(Calendar.MONTH);
		//设置日历为当前月第一天
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		//获取当前月第一天在当前周的位置
		int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
		//获取当前月第一天所在周的第一天
		int firstDayOfWeek = calendar.getFirstDayOfWeek();
		
		//首行缩进天数
		int day = 0;
		//如果日历当前日期不是所在周的第一天,则循环查找
		while(weekDay != firstDayOfWeek){
			//缩进天数自加
			day++;
			//日历当前天数向前减一,例如7月1日,执行之后为6月30日
			calendar.add(Calendar.DAY_OF_MONTH, -1);
			//获取日历当前日期在一周中的第几天
			weekDay = calendar.get(Calendar.DAY_OF_WEEK);
		}
		
		//获取周天数简称,如星期一,mon等
		//根据地区不同显示不同,可以通过Locale.setDefault(Locale.CANADA);设置
		String[] arys = new DateFormatSymbols().getShortWeekdays();
		//循环打印周天数简称
		do{
			System.out.print("\t"+arys[weekDay]);
			calendar.add(Calendar.DAY_OF_MONTH, 1);
			weekDay = calendar.get(Calendar.DAY_OF_WEEK);
		}while(weekDay != firstDayOfWeek);
		System.out.println();
		
		//根据当前月第一天在周中的天数设置首行缩进
		for(int i = 1; i <= day; i++){
			System.out.print("\t");
		}
		
		//设置日历对象时间为当前月第一天,准备打印日历
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		
		//循环打印日期
		do{
			int now = calendar.get(Calendar.DAY_OF_MONTH);
			System.out.print("\t"+now);
			
			//标记出当前日期
			if(today == now){
				System.out.print("*");
			}
			
			calendar.add(Calendar.DAY_OF_MONTH, 1);
			weekDay = calendar.get(Calendar.DAY_OF_WEEK);
			
			//如果处理后的日期是所在周的第一天,则换行
			if(weekDay == firstDayOfWeek){
				System.out.println();
			}
		}while(calendar.get(Calendar.MONTH) == month);
	}

转载于:https://www.cnblogs.com/aotian/p/4623137.html

是一个java控制台日历程序 import java.util.Scanner; class page100_calender{ private int year; private int firstStartDay; page100_calender(int year,int firstStartDay){ this.year=year; this.firstStartDay=firstStartDay; } public void printCalender(){ for(int i=1;i<=12;i++){ printTitle(i); printMonthBody(i); System.out.println(); } } public void printTitle(int month){ System.out.println(" "+getMonthName(month)+" "+year); System.out.println("_____________________________"); System.out.println(" Sun Mon Tue Web Thu Fri Sat "); } public String getMonthName(int month){ String monthName=null; switch(month){ case 1:monthName="January"; break; case 2:monthName="February";break; case 3:monthName="Marth";break; case 4:monthName="April";break; case 5:monthName="May";break; case 6:monthName="June";break; case 7:monthName="July";break; case 8:monthName="August";break; case 9:monthName="September";break; case 10:monthName="October";break; case 11:monthName="November";break; case 12:monthName="December";break; } return monthName; } public void printMonthBody(int month){ int startDay=getStartDay(month); int numberOfDaysMonth=getNumberOfDaysInMonth(month); int i=0; for(i=0;i<startDay;i++) System.out.print(" "); for(i=1;i<=numberOfDaysMonth;i++){ if(i<10) System.out.print(" "+i); else System.out.print(" "+i); if((i+startDay)%7==0) System.out.println(); } } public int getStartDay(int month){ int Days=0; for(int i=1;i<month;i++){ Days+=getNumberOfDaysInMonth(i); } return (firstStartDay+Days)%7; } public int getNumberOfDaysInMonth(int month){ if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){ return 31; } if(month==4||month==6||month==9||month==11){ return 30; } if(month==2) return isLeapYear()?29:28; return -1; } public boolean isLeapYear(){ return (year%4==0&&year%100!=0)||year%400==0; } } class page100_4_29_main{ public static void main(String[] args){ Scanner inputYear=new Scanner(System.in); System.out.println("输入年份:"); int tempYear=inputYear.nextInt(); Scanner inputFirstStartDay=new Scanner(System.in); System.out.println("该年第一天的星期:"); int tempStartDay=inputFirstStartDay.nextInt(); page100_calender calender=new page100_calender(tempYear,tempStartDay); calender.printCalender(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值