Java实现打印日历的功能
Posted shuitailiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现打印日历的功能相关的知识,希望对你有一定的参考价值。
编写一个程序,显示给定年月的日历。程序提示用户输入年份和月份,然后显示该月的整个日历。
代码:
1 import java.util.Scanner; 2 public class PrintCalendar{ 3 public static void main(String[] args){ 4 Scanner input=new Scanner(System.in); 5 6 System.out.print("Enter full year(e.g.,2011): "); 7 int Year=input.nextInt(); 8 9 System.out.print("Enter month as a number between 1 and 12: "); 10 int Month=input.nextInt(); 11 12 // int year=inputYear(); 13 //int month=inputMonth(); 14 printMonth(Year, Month); 15 } 16 /* 17 public static int inputYear(){ 18 boolean flag=true; 19 Scanner input=new Scanner(System.in); 20 while(flag){ 21 System.out.print("Enter full year(e.g.,2011): "); 22 int iYear=input.nextInt(); 23 if(iYear>=1800){ 24 flag = false; 25 } 26 } 27 return iYear; 28 } 29 30 public static int inputMonth(){ 31 boolean flag=true; 32 Scanner input=new Scanner(System.in); 33 while(flag){ 34 System.out.print("Enter month as a number between 1 and 12: "); 35 int iMonth=input.nextInt(); 36 if(iMonth>=1 && iMonth<=12){ 37 flag = false; 38 } 39 } 40 return iMonth; 41 }*/ 42 43 public static void printMonth(int year, int month){ 44 printMonthTitle(year, month); 45 printMonthBody(year,month); 46 } 47 48 public static void printMonthTitle(int year, int month){ 49 System.out.println("\\t" + getMonthName(month)+"\\t" +year); 50 System.out.println("-----------------------------------"); 51 System.out.println("Mon Tue Wed Thu Fri Sat Sun"); 52 } 53 public static String getMonthName(int month){ 54 String monthName=""; 55 switch (month){ 56 case 1: monthName="January"; break; 57 case 2: monthName="February"; break; 58 case 3: monthName="March"; break; 59 case 4: monthName="April"; break; 60 case 5: monthName="May"; break; 61 case 6: monthName="June"; break; 62 case 7: monthName="July"; break; 63 case 8: monthName="August"; break; 64 case 9: monthName="September"; break; 65 case 10: monthName="October"; break; 66 case 11: monthName="November"; break; 67 case 12: monthName="December"; break; 68 } 69 70 return monthName; 71 } 72 73 public static void printMonthBody(int year, int month){ 74 75 //Get start day of the week for the first date int the month 76 int startDay=getStartDay(year,month); 77 78 //Get number of days in the month 79 int numberOfDaysInMonth = getNumberOfDaysInMonth(year,month); 80 81 //Pad space before the first day of the month 82 int i=0; 83 for(i=1; i< startDay; i++){ 84 System.out.print(" "); 85 } 86 for(i=1; i<=numberOfDaysInMonth;i++){ 87 System.out.printf("%-4d", i); 88 89 if((i+startDay-1)%7==0) 90 System.out.println(); 91 } 92 System.out.println(); 93 } 94 95 /** Get the start day of month/1/year */ 96 public static int getStartDay(int year, int month){ 97 final int START_DAY_FOR_JAN_1_1800 = 3; 98 99 //Get the total number of days from 1/1/1800 to month/1/year 100 int totalNumberOfDays= getTotalNumberOfDays(year,month); 101 102 //Return the start day for month/1/year 103 return (totalNumberOfDays+START_DAY_FOR_JAN_1_1800)%7; 104 } 105 106 /** Get the total number of days from January 1, 1800; */ 107 public static int getTotalNumberOfDays(int year, int month){ 108 int total = 0; 109 110 //get total number of days from 1800 to 1/1/year 111 for(int i = 1800; i<year; i++){ 112 if(isLeapYear(i)) 113 total = total + 366; 114 else 115 total = total + 365; 116 } 117 118 //add days from January to the month prior to the calendar month 119 for(int i = 0; i<month;i++) 120 total +=getNumberOfDaysInMonth(year, i); 121 122 return total; 123 } 124 125 /** Get the number of days in a month */ 126 public static int getNumberOfDaysInMonth(int year, int month){ 127 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) 128 return 31; 129 if(month==4||month==6||month==9||month==11) 130 return 30; 131 if(month==2) 132 return isLeapYear(year)?29:28; 133 return 0; 134 } 135 136 /** Determine if it is a leap year */ 137 public static boolean isLeapYear(int year){ 138 return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0); 139 } 140 }
执行效果:
以上是关于Java实现打印日历的功能的主要内容,如果未能解决你的问题,请参考以下文章