求一个日期对应是星期几--Java代码

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+"日";
	}
}

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值