java控制台打印日历

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)