import java.util.Calendar;
import java.util.InputMismatchException;
import java.util.Locale;
import java.util.Scanner;
/**
* Created by wangjunling on 7/15/14.
*/
public class PrintCalendar {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = 0;
int month = 0;
boolean inputEnd = true;
boolean inputYear = true;
boolean inputMonth = true;
while (inputEnd) {
while (inputYear) {
System.out.println("请输入年份:");
try {
year = input.nextInt();
if (year < 1800) {
System.out.println("输入错误!");
continue;
}
} catch (InputMismatchException e) {
System.out.println("输入错误!");
input.nextLine();
continue;
}
inputYear = false;
}
while (inputMonth) {
System.out.println("请输入月份:");
try {
month = input.nextInt();
if (month < 1 || month > 12) {
System.out.println("输入错误!");
continue;
}
} catch (InputMismatchException e) {
System.out.println("输入错误!");
input.nextLine();
continue;
}
inputMonth = false;
}
printMonth(year, month);
inputEnd = false;
}
}
public static int getStartDay(int year, int month) {
int startDay1800 = 3;
return (getTotalNumberOfDays(year, month) + startDay1800) % 7;
}
public static boolean isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
}
return false;
}
public static int getNumberOfDaysInMonth(int year, 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(year) ? 29 : 28;
return 0;
}
public static int getTotalNumberOfDays(int year, int month) {
int total = 0;
for (int i = 1800; i < year; i++) {
if (isLeapYear(i)) {
total = total + 366;
} else {
total = total + 365;
}
}
for (int i = 1; i < month; i++) {
total = getNumberOfDaysInMonth(year, i) + total;
}
return total;
}
public static String getMonthName(int month) {
switch (month) {
case 1:
return "January";
case 2:
return "February";
case 3:
return "March";
case 4:
return "April";
case 5:
return "May";
case 6:
return "June";
case 7:
return "July";
case 8:
return "August";
case 9:
return "September";
case 10:
return "October";
case 11:
return "November";
case 12:
return "December";
}
return "";
}
public static void printMonth(int year, int month) {
printMonthTitle(year, month);
printMonthBody(year, month);
}
public static void printMonthTitle(int year, int month) {
System.out.println(" " + getMonthName(month) + " " + year);
System.out.println("-----------------------------------");
System.out.println(" Sun Mon Tue Wed Thu Fri Sat");
}
public static void printMonthBody(int year, int month) {
int startDay = getStartDay(year, month);
int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
int i = 0;
System.out.printf("%4d", getNumbersWeek(year, month) + i);
for (int j = 0; j < startDay; j++) {
System.out.print(" ");
}
for (int j = 1; j <= numberOfDaysInMonth; j++) {
System.out.printf("%4d", j);
if ((j + startDay) % 7 == 0) {
System.out.println();
if (j != numberOfDaysInMonth) {
System.out.printf("%4d", getNumbersWeek(year, month) + i + 1);
}
i++;
}
}
System.out.println();
}
public static int getNumbersWeek(int year, int month) {
int startYearWeek = getStartDay(year, 1);
int startMonthWeek = getStartDay(year, month);
int total = 0;
int weekNumbers = 0;
for (int i = 1; i < month; i++) {
total = getNumberOfDaysInMonth(year, i) + total;
}
if (startYearWeek <= 4) {
weekNumbers = (total - (7 - startYearWeek)) / 7 + 1;
} else {
weekNumbers = (total - (7 - startYearWeek)) / 7;
}
if (startMonthWeek != 0 && month != 1) {
weekNumbers++;
}
return weekNumbers;
}
}
java控制台打印日历
最新推荐文章于 2021-02-16 15:07:51 发布