Java 根据字符串格式日期 转化出当前属于哪一年的第几周

函数:
 

    /**
     * 转化指定日期,哪一年第几周
     * @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 函数  :


 

 好了,该篇就到这。

猜你喜欢

转载自blog.csdn.net/qq_35387940/article/details/129991919