Java计算日期在当月是第几周
背景
公司项目需求是统计周报,一开始我的做法是按每月1号开始为第一周统计周报,比如2020-05-01到2020-05-03属于5月第一周,2020-05-04到2020-05-10为5月第二周。
产品小姐姐看了觉得不对,账单周报统计,是以一周7天为维度,如果按照上面的做法,统计出来5月第一周的周报只有3天,4月最后一周只有4天,这种不符合账单统计型产品的需求。
后面又拿出支付宝的周报账单给我看
第一步当然先去Google百度,但是找了一段时间都没有想要的,不是这个抄那个,就是太杂太乱。总之最后决定还是自己写这个逻辑了。
Java LocalDate API
每月第1个周一为该月第一周的做法
其实知道了规则之后,做法和思路很简单。
- 获得日期的所在周的周一
- 获得日期这个月的第一个周一
- 根据两个周一判断是这个月的第几周
/**
* 传入日期判断属于哪一年哪一月第几周
*
* @apiNote 以每月的第一个周一所在的周作为每月第一周
* @param date 时间格式(yyyyMMdd) 20200701
* @return java.lang.String 返回字符串(2020-06-W5) 2020年6月第5周
* @author kiring
*/
public String getWeekOfMonthByDay(int date){
DateTimeFormatter dfDay = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate localDate = LocalDate.of(date / 10000, (date / 100) % 100, date % 100);
// 获得当前日期的所在周的周一(previousOrSame:如果当前日期是周一,就返回当前日期)
LocalDate localDateMondy = LocalDate.of(date / 10000, (date / 100)