没有用网上的公式。原理是已知公元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 }