日期:2014-05-20  浏览次数:20935 次

日历问题
package Lesson5;

import java.util.Scanner;

public class PrintCalender {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("输入年份:");
int year = input.nextInt();
System.out.print("输入月份:");
int month = input.nextInt();

System.out.println(getAllDay(month, year));
PrintMonth(month, year);
}

private static void PrintMonth(int month, int year) {
getMonthTital(month, year);
getMonthBody(month, year);
}

private static void getMonthTital(int month, int year) {
System.out.println(" " + getMonthName(month) + " " + year);
System.out.println("---------------------------");
System.out.println(" Sun" + " " + "Mon" + " " + "Tue" + " " + "Wed"
+ " " + "Thu" + " " + "Fri" + " " + "Sat");
}

private static String getMonthName(int month) {
String MonthName = "";
switch (month) {
case 1:
return "Jan";
case 2:
return "Feb";
case 3:
return "Mar";
case 4:
return "Apr";
case 5:
return "May";
case 6:
return "Jun";
case 7:
return "July";
case 8:
return "Aug";
case 9:
return "Sept";
case 10:
return "Oct";
case 11:
return "Nov";
case 12:
return "Dec";
}
return MonthName;
}

private static void getMonthBody(int month, int year) {
int startDay = getstartDay(month, year);
int monthDay = getMonthDay(month, year);
for (int i = 0; i < startDay; i++) {
System.out.print(" ");
}
for (int i = 1; i <= monthDay; i++) {
System.out.printf("%4d", i);
if ((i + startDay) % 7 == 0) {
System.out.println();
}
}
System.out.println();
}

private static int getstartDay(int month, int year) {
final int Start_Day_For_Jan_1_1800 = 3;
int allDay = getAllDay(month, year);
return (allDay + Start_Day_For_Jan_1_1800) % 7;
}

// private static int getAllDay(int month, int year) {
// 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 = total + getMonthDay(month, i);
}
return total;
}

private static int getMonthDay(int month, int year) {
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;
}

private static boolean isLeapyear(int year) {
return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
}
}


日历总是算不准 我怀疑是我的总天数算错了 求高手指教 总天数已经特别注释了

------解决方案--------------------
像这种日期日历,还是用Calendar来处理方便
修改一下getMonthBody方法,用Calendar来处理
Java code
private static void getMonthBody(int month, int year) {    
//int startDay = getstartDay(month, year);
//int monthDay = getMonthDay(month, year);
    Calendar c = Calendar.getInstance(); //获取Calendar实例
    c.set(Calendar.YEAR, year); //设置年
    c.set(Calendar.MONTH, month-1); //设置月
    c.set(Calendar.DAY_OF_MONTH, 1); //设置月初
    int startDay = c.get(Calendar.DAY_OF_WEEK) 
                 - c.getActualMinimum(Calendar.DAY_OF_WEEK); //计算周开始
    int monthDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); //计算月末日
for (int i = 0; i < startDay; i++) {
System.out.print("    ");
}
for (int i = 1; i <= monthDay; i++) {
System.out.printf("%4d", i);
if ((i + startDay) % 7 == 0) {
System.out.println();
}
}
System.out.println();    
}