获取某年 所有周的开始和结束 并输出

一,创建周的开始和结束对象

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年最后一月最后一周

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值