import acm.program.*;
/**
* 程序功能:求某一个日期对应是星期几
*
*
*/
public class CalculateWeekDay extends ConsoleProgram{
public void run(){
MyDate date = readDate("请按yyyy-MM-dd的格式输入日期:");
int year = date.getYear();
int month = date.getMonth();
int day = date.getDay();
int total,week,i;
week = 1; //起始日1979-12-31是mondy
total = yearContainsDay(year);
/*计算当年前几月的累计天数与total的初值之和*/
for(i = 1;i<=month-1;i++){
switch(i){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
total += 31;
break;
case 4:case 6:case 9:case 11:
total += 30;
break;
case 2:
if(isLeap(year)) total += 29;
else total += 28;
break;
}
}
total += day;//将本月天数加到total上
week = (week + total) % 7;
print("Today "+date+" is "+printWeek(week));
}
/**
*
* @param prompt
* @return a new MyDate
*/
private MyDate readDate(String prompt){
String dateStr = readLine(prompt);
String[] str = dateStr.split("-");
int year = Integer.parseInt(str[0]);
int month = Integer.parseInt(str[1]);
int day = Integer.parseInt(str[2]);
return new MyDate(year,month,day);
}
/**
* 计算year至1980年所包含的天数
* @param year
* @return
*/
private int yearContainsDay(int year){
int total = 0;
for(int i = 1980;i<year;i++){
if(isLeap(i))total += 366;
else total += 365;
}
return total;
}
private boolean isLeap(int year){
return (year % 400 == 0) | (year % 4 == 0) & (year % 4 != 100);
}
private String printWeek(int i){
switch(i){
case 0:return "Sunday";
case 1:return "Monday";
case 2:return "Tuesday";
case 3:return "Wednesday";
case 4:return "Thursday";
case 5:return "Friday";
case 6:return "Saturday";
default :return "";
}
}
}
<pre class="java" name="code">public class MyDate {
private int year;<img src="https://img-blog.csdn.net/20140602124329312?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzczNTgzMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
private int month;
private int day;
public MyDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
int getYear(){
return this.year;
}
int getMonth(){
return this.month;
}
int getDay(){
return this.day;
}
public String toString(){
return this.year+"年"+this.month+"月"+day+"日";
}
}