函数:
/**
* 转化指定日期,哪一年第几周
* @param dateStr
* @return
*/
public static String getWeeksInMonthOfDate(String dateStr) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setMinimalDaysInFirstWeek(4);
calendar.setTime(dateFormat.parse(dateStr));
int weekOfYear = calendar.get(Calendar.YEAR);
int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);
//Calendar获取月份需要+1
int nowMonth = calendar.get(Calendar.MONTH) +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;
}
return weekOfYear+"年"+"第"+weekNo+"周";
}
ps:
calendar.setMinimalDaysInFirstWeek(4); 为什么设置4 ,至少4天, 因为跟sql很多函数保持一致。
MySQL WEEKOFYEAR()
函数返回给定日期位于当年的第几周,取值范围为 1
到 53
。
该函数的前提是“一周的第一天是星期一,并且一年中的第一周有 3 天以上”,它相当于 WEEK(date,3)
。
测试效果:
public static void main(String[] args) throws ParseException {
String dayStr="2023-04-06";
String result = getWeeksInMonthOfDate(dayStr);
System.out.println(result);
}
输出:
2023年第14周
扫描二维码关注公众号,回复:
14623854 查看本文章
注意点, 比如2022-01-02 ,看起来是22年的日期,其实是属于在2021年的 52周里面。
测试效果:
public static void main(String[] args) throws ParseException {
String dayStr="2022-01-02";
String result = getWeeksInMonthOfDate(dayStr);
System.out.println(result);
}
输出:
2021年第52周
相当于mysql的 WEEKOFYEAR 函数 :
好了,该篇就到这。