计算某天是星期几的java代码?

没有用网上的公式。原理是已知公元1年1月1日是星期一,计算任意日期与这一天之间一共有多少天,再判断是星期几。开始一直有问题,后来发现平年的2月应该是28天,而不是我写的30天,—_—#!

 1 import java.util.Scanner;
 2 public class Test {
 3     public static void main(String argv[]){
 4         while(true){
 5         System.out.println("请输入日期:");            
 6         Scanner sc=new Scanner(System.in);
 7         int y=sc.nextInt();
 8         int m=sc.nextInt();
 9         int d=sc.nextInt();    
10         System.out.println("这一天是星期"+weekday(y, m, d));
11         }
12     }
13     public static boolean isLeapYear(int year){
14         boolean flag = false;
15 
16         if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
17             flag = true;
18         else
19             flag = false;
20         return flag;
21     }
22     
23     public static String weekday(int year,int month,int day){
24         long amount=0;
25         for(int i=1;i<year;i++){
26             if(isLeapYear(i))
27                 amount++;
28         }
29         amount+=365*(year-1);
30         for(int i=1;i<month;i++){
31             amount+=daysofMonth(year, i);
32         }
33         amount+=day;
34         int week=(int) (amount%7);        
35         String w="";
36         switch(week){
37         case 0:w="日";break;
38         case 1:w="一";break;
39         case 2:w="二";break;
40         case 3:w="三";break;
41         case 4:w="四";break;
42         case 5:w="五";break;        
43         case 6:w="六";break;                
44         }
45         return w;        
46     }
47     private static int daysofMonth(int year,int month){        
48         switch(month){
49         case 1:
50         case 3:
51         case 5:
52         case 7:
53         case 8:
54         case 10:
55         case 12:return 31;
56         case 4:
57         case 6:
58         case 9:
59         case 11:return 30;
60         case 2: if(isLeapYear(year))
61             return 29;
62         else
63             return 28;
64         default :return 0;
65         }        
66     }    
67 }