龙空技术网

Java 计算日期属于当月第几周(日期周计算)

能吃能睡的小可 61

前言:

今天小伙伴们对“java获取当前年月日”大致比较关心,你们都想要分析一些“java获取当前年月日”的相关知识。那么小编在网络上收集了一些关于“java获取当前年月日””的相关资讯,希望姐妹们能喜欢,大家快快来学习一下吧!

计算日期属于当月第几周(日期周计算)

本文周计算时间方式为:当月第一个周一为第一周 计算

获取月第一个周一、从当月第一天开始找第一个周一时间与 sourceTime [传入时间对比],sourceTime在第一个周一时间之前 表示属于上月的sourceTime 与第一个周一时间差,再以7天计算

/** * @author aiyuan * @date 2021/7/27 */public class DateWeekUtil {    /**     *获取当月第一天     */    public static LocalDateTime getFirstLocalDayOfMonth(LocalDateTime localDateTime) {        return localDateTime.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);    }	/**     *获取当月第一周  以第一个周一为准     */    private static LocalDateTime getFirstMonday(LocalDateTime sourceTime) {        LocalDateTime firstMondayOfMonth = getFirstLocalDayOfMonth(sourceTime);        for (int i = 0; i < 6; i++) {            DayOfWeek dayOfWeekTemp = firstMondayOfMonth.getDayOfWeek();            if (dayOfWeekTemp.equals(DayOfWeek.MONDAY)) {                break;            }            //往后推一天            firstMondayOfMonth = firstMondayOfMonth.plusDays(1);        }        return firstMondayOfMonth;    }    /**     * 获取几月份的第几周 [X月份第X周]     *     */    public static String getMonthNoAndWeekNo(LocalDateTime sourceTime) {        String monthNoAndWeekNo;        //获取当月的第一天        //获取月第一个周一,从当月第一天开始找        LocalDateTime firstMondayOfMonth = getFirstMonday(sourceTime);        //比较当月的第一个星期一 < = 参数时间        if (firstMondayOfMonth.isBefore(sourceTime) || firstMondayOfMonth.isEqual(sourceTime)) {            //当月第一个周一在当前时间之前 firstMondayOfMonth<=sourceTime            //计算两个时间间隔天数            int dayOfMonthFirstMonday = firstMondayOfMonth.getDayOfMonth();            int dayOfMonthSourceTime = sourceTime.getDayOfMonth();            int diffDays = dayOfMonthSourceTime - dayOfMonthFirstMonday;            //第几周weekNo            int weekNo = (diffDays / 7) + 1;            //月份            int monthNo = sourceTime.getMonth().getValue();            monthNoAndWeekNo = monthNo + "月份" + "第" + weekNo + "周";        } else {            //如果当月的第一个周一大于参数时间,则要计算到上个月份去            //获取上一个月的第一个周一            LocalDateTime lastMontLocalDateTime = sourceTime.minusMonths(1);            //上个月的第一天            //从上个月的第一天开始找周一            LocalDateTime firstMondayOfMonthLast = getFirstMonday(lastMontLocalDateTime);            //  计算两个时间间隔天数 (上月第一个周一 减去 当前时间)            Duration duration = Duration.between(firstMondayOfMonthLast, sourceTime);            long diffDays = duration.toDays(); //相差的天数            //第几周weekNo            long weekNo = (diffDays / 7) + 1;            //月份            int monthNo = firstMondayOfMonthLast.getMonth().getValue();//汉字版月份            monthNoAndWeekNo = monthNo + "月份" + "第" + weekNo + "周";        }        return monthNoAndWeekNo;    }}

标签: #java获取当前年月日 #java取时间差 #java判断时间是否在某个区间内 #java字符串日期加减天数 #java日期减一天