运行程序在控制台输入正确的日期即可计算周日期,代码如下:
import java.util.Scanner;
public class Week{
public static void main(String args[]){
int[] motify={0,1,4,4, 0,2,5, 0,3,6, 1,4,6}; //月份调整表
int year=0,yearOfset,month=0,day=0,sum,result;
boolean flag=true;
String date=null;
String[] sp=null;
String week=null;
Scanner scanner=new Scanner(System.in);
while(flag){
System.out.println("退出程序请输入:#");
System.out.print("请输入日期1900-2099(例如:2013-10-1):");
while(true){
try{
date=scanner.nextLine();
if(date.equals("#")){
flag=false;
break;
}
sp=date.split("-"); //拆分字符串
year=Integer.valueOf(sp[0]);
month=Integer.valueOf(sp[1]);
day=Integer.valueOf(sp[2]);
}
catch(Exception e){
year=0;
month=0;
day=0;
}
if(year!=0 && month!=0 && day!=0)
if( (year>=1900 && year<=2099) )
if( (year%4==0 && year%100!=0) || year%400==0 ){
if(month==2 && (day>=1 && day<=29) )
break;
else if( (month==1 || month==3 || month==5 ||
month==7 || month==8 || month==10 ||
month==12) && (day>=1 && day<=31) )
break;
else if( (month==4 || month==6 || month==9 ||
month==11) && (day>=1 && day<=30))
break;
}
else{
if(month==2 && (day>=1 && day<=28) )
break;
else if( (month==1 || month==3 || month==5 ||
month==7 || month==8 || month==10 ||
month==12) && (day>=1 && day<=31) )
break;
else if( (month==4 || month==6 || month==9 ||
month==11) && (day>=1 && day<=30))
break;
}
if(flag)
System.out.print("请输入正确日期1900-2099(例如:2013-10-1):");
}
yearOfset=year-1900; //当前年份相对于1900年的偏移值
if( ((year%4==0 && year%100!=0) || year%400==0) && (month==1 || month==2) ) //闰年且月份为1或2
sum= motify[month] - 1 + day + yearOfset + yearOfset/4; //调整表值减一
else
sum= motify[month] + day + yearOfset + yearOfset/4;
result=sum%7;
switch(result){
case 0:
week="周六";
break;
case 1:
week="周日";
break;
case 2:
week="周一";
break;
case 3:
week="周二";
break;
case 4:
week="周三";
break;
case 5:
week="周四";
break;
case 6:
week="周五";
break;
default:
break;
}
if(flag)
System.out.println(date + "是" + week + "\n");
}
}
}