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控制台日历程序 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(); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值