需求:根据当前的日期可以判断属于第几个周度,哪一年,并兼容跨年问题
逻辑:周一作为一周的开始,新一年1号所在的周,从1号往后数至少有4天属于新一年则将周计算为新一年的第一周,如2019年12月30号属于2020年的第一周
上代码:
package org.test.unittest.DATETest;
import com.alibaba.fastjson.JSON;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DATATEST {
/**
* 根据当前日期,返回当前日期,年份,周度
*/
public static List GetWeekYearNo(String day) throws ParseException{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setMinimalDaysInFirstWeek(4);
calendar.setTime(dateFormat.parse(day));
List<Object> list = new ArrayList<>();
int weekOfYear = calendar.get(Calendar.YEAR);
int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);
int nowmonth = calendar.get(Calendar.MONTH) +1; //Calendar获取月份需要+1
//正常12月份肯定都是大月份的周数如53 52 51 50 49 如果周数是1而月份是12,则表示日期被计算在了下一年 年份需要 +1
if(weekNo==1 && nowmonth==12){
weekOfYear = weekOfYear + 1;
}
//1月份肯定都是小周数如1,2,3,4,5 如果周数是52 或者53 而月份是1 则表示日期被计算在了上一年,年份需要-1
if((weekNo==53 || weekNo==52) && nowmonth==1){
weekOfYear = weekOfYear - 1;
}
list.add(day);
list.add(weekOfYear);
list.add(weekNo);
return list;
}
public static void main(String[] args) throws Exception{
String day1 = "2018-12-30 23:59:59";
String day2 = "2018-12-31 00:00:00";
String day3 = "2019-01-06 23:59:59";
String day4 = "2019-12-29 23:59:59";
String day5 = "2019-12-30 00:00:00";
String day6 = "2020-01-05 23:59:59";
String day7 = "2020-12-27 23:59:59";
String day8 = "2020-12-28 00:00:00";
String day9 = "2021-01-03 23:59:59";
String day10 = "2021-12-26 23:59:59";
String day11 = "2021-12-27 00:00:00";
String day12 = "2022-01-02 23:59:59";
String day13 = "2022-01-03 00:00:00";
String day14 = "2022-01-10 00:00:00";
String day15 = "2022-12-25 23:59:59";
String day16 = "2022-12-26 00:00:00";
String day17 = "2023-01-01 23:59:59";
String day18 = "2023-01-02 00:00:00";
String day19 = "2023-12-24 23:59:59";
String day20 = "2023-12-25 00:00:00";
String day21 = "2023-12-31 23:59:59";
String day22 = "2024-01-01 00:00:00";
String day23 = "2024-12-29 23:59:59";
String day24 = "2024-12-30 00:00:00";
String day25 = "2025-01-05 23:59:59";
String day26 = "2025-12-28 23:59:59";
String day27 = "2025-12-29 00:00:00";
String day28 = "2026-01-04 23:59:59";
System.out.println(" 当前日期 , 年 ,周度");
System.out.println(JSON.toJSONString(GetWeekYearNo(day1)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day2)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day3)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day4)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day5)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day6)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day7)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day8)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day9)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day10)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day11)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day12)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day13)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day14)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day15)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day16)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day17)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day18)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day19)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day20)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day21)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day22)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day23)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day24)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day25)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day26)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day27)));
System.out.println(JSON.toJSONString(GetWeekYearNo(day28)));
}
}
运行结果: