日期類,根據日期計算是本年度的第幾天,第幾周,星期幾
阿新 • • 發佈:2019-02-03
要求:根據日期求天數,周,星期幾
思路:試試不用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,寫出來分享,程式碼可直接執行