一,创建周的开始和结束对象
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年最后一月最后一周