1. 程式人生 > >日期類,根據日期計算是本年度的第幾天,第幾周,星期幾

日期類,根據日期計算是本年度的第幾天,第幾周,星期幾

要求:根據日期求天數,周,星期幾

思路:試試不用java封裝好的方法寫一個日期類,屬性:年、月、日;首先判斷日期是否合法,

第一功能計算天數:求當月前一個月與第一月相差的天數,在加上當前月到幾號的天數;

第二個功能計算第幾周:用第一個求得的天數除7就得到了該日期是本年度的第幾周;

第三個功能計算星期幾:首先我們要找到一個座標,以這個座標為基準來求星期幾,計算機世界裡是以1970年1月1號為基準的,然而我們得知70年1月1號是星期四;這是後我們建立一個星期的二維陣列,下標為0就為星期四,下標6為星期三;然後我們求出日期距離1970年1月1號的天數在對7取餘,所得餘數進行-1(-1是因為這個數要代表下標),然後用這個下標去找陣列中對應星期幾,這樣就可以求出是周幾了。(程式碼如下)

public class MyDate {

	private int year;
	private int month;
	private int day;

	public MyDate() {
		super();
	}

	public MyDate(int year, int month, int day) {
		super();
		this.year = year;
		this.month = month;
		this.day = day;
	}

	public int getYear() {
		return year;
	}

	public int getMonth() {
		return month;
	}

	public int getDay() {
		return day;
	}

	/**
	 * 本年度第幾天
	 * 
	 * @return
	 */
	public static int day(MyDate date) {

		int years = date.getYear();
		int months = date.getMonth();
		int days = date.getDay();

		if (!feifapanduan(years, months, days)) {
			System.out.println("輸入年份不合法!");
			return -1;
		}

		/**
		 * 計算日期在本年度的天數
		 */
		int sum = 0;
		for (int i = 1; i < months; i++) {
			sum += ym(years, i);
		}
		// 返回本年度多少天
		return sum + days;

	}

	/**
	 * 第幾周
	 */
	public static void weeks(MyDate date) {

		int sum = day(date);

		int weeks = sum / 7;
		if (sum % 7 == 0) {
			System.out.println("第" + weeks + "周");
		} else {
			int week = weeks + 1;
			System.out.println("第" + week + "周");
		}
	}

	/**
	 * 星期幾
	 */
	public static void weekxingqi(MyDate date) {

		String[] wekesday = new String[] { "星期四", "星期五", "星期六", "星期天", "星期一",
				"星期二", "星期三" };
		int year = date.year;
		int sum = day(date);
		/**
		 * 計算日期距70年的天數 滿足條件 6+n<=day<=6+7n
		 * 
		 */
		int yearsum = 0;
		for (int a = 1970; a < year; a++) {
			if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0) {
				yearsum += 366;

			} else {
				yearsum += 365;

			}
		}
		// 定義距70年的天數
		int ymsum = yearsum + sum;

		// 天數對7取餘
		int weekday = ymsum % 7;

		System.out.println("相距70年" + ymsum + "    " + "餘數" + weekday);
		/**
		 * 迴圈星期資料根據餘數找出星期幾
		 */
		for (int i = 0; i < wekesday.length; i++) {
			if (i == weekday - 1) {
				System.out.println(wekesday[i]);
			}
		}
	}

	/**
	 * 判斷是否閏年,選擇月份
	 * 
	 * @param years
	 * @param month
	 * @return
	 */
	public static int ym(int years, int month) {

		int days = 0;
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			days = 31;
			break;

		case 4:
		case 6:
		case 9:
		case 11:
			days = 30;
			break;

		case 2:
			if (years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {
				days = 29;
			} else {
				days = 28;
			}
			break;
		default:

			break;
		}
		return days;

	}

	/**
	 * 判斷輸入日期是否合法
	 * 
	 * @param year
	 * @param month
	 * @param ri
	 * @return
	 */
	public static boolean feifapanduan(int year, int month, int ri) {
		if (year != 0 && month > 0 && month < 13 && ri < ym(year, month)) {
			return true;
		}
		return false;
	}
}

測試程式碼:

@SuppressWarnings("static-access")
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyDate date = new MyDate(2018, 2, 26);
		System.out.println("本年度第" + date.day(date) + "天");
		date.weeks(date);
		date.weekxingqi(date);
	}


執行結果:


OK,寫出來分享,程式碼可直接執行