1. 程式人生 > 其它 >獲取某年 所有周的開始和結束 並輸出

獲取某年 所有周的開始和結束 並輸出

技術標籤:Java語言程式設計

一,建立周的開始和結束物件

package Test;

/**
 * @author Administrator
 */
class Week1 {
    String start;
    String end;

    public String getStart() {
        return start;
    }

    public void setStart(String start) {
        this.start = start;
    }

    public String getEnd() {
        return end;
    }

    public void setEnd(String end) {
        this.end = end;
    }

    public Week1(String start, String end) {
        this.start = start;
        this.end = end;
    }

    @Override
    public String toString() {
        return "Week1{" +
                "start='" + start + '\'' +
                ", end='" + end + '\'' +
                '}';
    }
}

二,設計方法

package Test;

import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;

/**
 * @author Administrator
 *@week 獲取某年 所有周開始和結束
 */
public class Test {
    public static ArrayList week(int number) {
        //輸入一個年份把這個年份拼成一個字串年份+ 1.1
        String Str = number + "-01-01";
        //賦值給date 日期 返回的是   xxxx-xx-xx
        LocalDate date = LocalDate.parse(Str);
        //value 是這一年的第一天星期幾 (轉換成數字型)date.getDayOfWeek() 獲取英文形式的這一年的第一天是星期幾
        int value = date.getDayOfWeek().getValue();

        //建立一個動態陣列把每週日期開始和結束放進去
        ArrayList arrayList = new ArrayList();


        //判斷是否是閏年
        boolean date1 = date.isLeapYear();

        //刪除1月前面的數 然後對這個數求餘數 就是後面沒有遍歷到的數  拿總數減去 前後天數就是剩餘天數
        //閏年
        int value1 = 366 - (8 - value);
        int value2 = value1 - (value1 % 7);
         //不是閏年
        int value3 = 365 - (8 - value);
        int value4 = value3 - (value3 % 7);

        /**
         * 因為一年第一天是星期value 假設星期5(隱藏屬性他還是1月1號) 那麼下週1 就是1月4號  他們之間的關係是
         * 9-value 得到 這一年的第一週開始日期 開始日期加6 就是結束日期   一共有多少天可以分為 閏年 非閏年
         * LocalDate.ofYearDay(number, i) 是某年的第多少天返回 xxxx-xx-xx
         * 例如LocalDate.ofYearDay(2021, 38) 返回 2021-2-7
         * 這樣就可以把資料存放動態數組裡面了  這裡我們要求了 一週的開始和結束 加了兩個物件
         * 將時間型轉換成字串是localDate1.toString();   toString方法
         */

        for (int i = 9 - value; i <= (date1 ? value2 : value4); i = i + 7) {

            LocalDate localDate1 = LocalDate.ofYearDay(number, i);
            LocalDate localDate2 = LocalDate.ofYearDay(number, i + 6);
            Week1 week1 = new Week1(localDate1.toString(), localDate2.toString());
            arrayList.add(week1);
        }

        return arrayList;

    }

    public static void main(String[] args) {
       System.out.println(week(2021));

    }
}

三,執行結果圖 2021年第一個月第一週開始 和2021年最後一月最後一週