在控制台显示本月日历(来自《Java核心技术.基础》)

需求:使用GregorianCalendar对象获取日期信息,在控制台显示本月日历。

效果:

July
 Sun Mon Tue Wed Thu Fri Sat
              1   2   3*  4 
  5   6   7   8   9  10  11 
 12  13  14  15  16  17  18 
 19  20  21  22  23  24  25 
 26  27  28  29  30  31 

结果中带有"*"号的日期代表当前日期。

代码:

package gemu.test.date;

import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
/**
 * 控制台显示本月日历
 * @author Gemu
 * @date 2015-7-3
 */
public class GregorianCalendarTest {

	public static void main(String[] args) {
		GregorianCalendar now = new GregorianCalendar(); // 当前日期
		
		int today = now.get(Calendar.DAY_OF_MONTH); // 获取当前日期是本月的第几天
		int month = now.get(Calendar.MONTH);
		now.set(Calendar.DAY_OF_MONTH, 1); // 设置当前日期是本月的第1天
		
		int weekday = now.get(Calendar.DAY_OF_WEEK); // 获取当前日期所在的周有几天
		
		int firstDayOfWeek = now.getFirstDayOfWeek();

		int indent = 0;
		while (weekday != firstDayOfWeek) {
			indent++ ;
			now.add(Calendar.DAY_OF_MONTH, -1); // 将当前日期的前一天是本月的第几天设置为当前日期所在本月的第几天。哎~这个真的不知道怎么解释了=.=!
			weekday = now.get(Calendar.DAY_OF_WEEK);
		}
		
		String[] weekdayNames = new DateFormatSymbols(Locale.US).getShortWeekdays();
		String[] months = new DateFormatSymbols(Locale.US).getMonths();
		System.out.println(months[month]);
		do {
			System.out.printf("%4s", weekdayNames[weekday]);
			now.add(Calendar.DAY_OF_MONTH, 1);
			weekday = now.get(Calendar.DAY_OF_WEEK);
		} while (weekday != firstDayOfWeek);
		
		System.out.println();
		
		for (int i = 1; i <= indent; i++) {
			System.out.printf("    ");
		}
		
		now.set(Calendar.DAY_OF_MONTH, 1); // 将当前日期的后一天是本月的第几天设置为当前日期所在本月的第几天。还是不要看这行注释了。。。=.=!
		
		do {
			int day = now.get(Calendar.DAY_OF_MONTH);
			System.out.printf("%3d", day);
			
			if (day == today) 
				System.out.print("*");
			else
				System.out.print(" ");
			
			now.add(Calendar.DAY_OF_MONTH, 1);
			weekday = now.get(Calendar.DAY_OF_WEEK);
			
			if (weekday == firstDayOfWeek)
				System.out.println();
		} while (now.get(Calendar.MONTH) == month);
		
		if (weekday != firstDayOfWeek)
			System.out.println();
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是一个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、付费专栏及课程。

余额充值