java8日期计算(偏移N周,返回指定星期的日期)

简介: java8日期计算(偏移N周,返回指定星期的日期)

使用举例:指定一个日期:如2022-08-26,返回两周前的周五,返回2022-08-12

一、工具类

package com.example.demo;
 
import java.time.DayOfWeek;
import java.time.LocalDate;
 
public class MyDataTimeUtil {
    /**
     * 获取前n个月
     * @param n 数值
     * @param localDate 比较时间
     * @return
     */
    public static LocalDate getLastMonth(LocalDate localDate, int n) {
        return localDate.minusMonths(n);
    }
 
    /**
     * 获取后n个月
     * @param n 数值
     * @param localDate 比较时间
     * @return
     */
    public static LocalDate getNextMonth(LocalDate localDate, int n) {
        return localDate.plusMonths(n);
    }
 
    /**
     * 获取前n个月
     * @param n 数值
     * @return
     */
    public static LocalDate getLastMonth(int n) {
        return getLastMonth(LocalDate.now(), n);
    }
 
    /**
     * 获取后n个月
     * @param n 数值
     * @return
     */
    public static LocalDate getNextMonth(int n) {
        return getNextMonth(LocalDate.now(), n);
    }
 
    /**
     * 获取开始时间的dayOfWeek的日期
     * @param localDate 开始时间
     * @param dayOfWeek 周几
     * @return 日期
     */
    public static LocalDate getCurrentWeekMonday(LocalDate localDate,DayOfWeek dayOfWeek) {
        int weekValue = localDate.getDayOfWeek().getValue();
        int paramWeekValue = dayOfWeek.getValue();
        if (weekValue == paramWeekValue) {
            return localDate;
        }
        if(paramWeekValue>weekValue){
          return   localDate.plusDays(paramWeekValue - weekValue);
        }else {
            return   localDate.minusDays(weekValue - paramWeekValue);
        }
    }
 
    /**
     * 获取当前时间的dayOfWeek的日期
     * @param dayOfWeek 周几
     * @return 日期
     */
    public static LocalDate getCurrentWeekMonday(DayOfWeek dayOfWeek) {
        return getCurrentWeekMonday(LocalDate.now(),dayOfWeek);
    }
 
 
 
    /**
     * 获取开始时间的dayOfWeek的日期
     * @param localDate 开始时间
     * @param dayOfWeek 周几
     * @param n n周前
     * @return
     */
    public static LocalDate getLastWeekMonday(LocalDate localDate,DayOfWeek dayOfWeek,int n) {
        localDate = localDate.minusDays(n*7);
        return getCurrentWeekMonday(localDate,dayOfWeek);
    }
 
    /**
     * 获取当前时间的dayOfWeek的日期
     * @param dayOfWeek 周几
     * @param n n周前
     * @return
     */
    public static LocalDate getLastWeekMonday(DayOfWeek dayOfWeek,int n) {
        LocalDate localDate = LocalDate.now().minusDays(n*7);
        return getCurrentWeekMonday(localDate,dayOfWeek);
    }
 
    /**
     * 获取开始时间的dayOfWeek的日期
     * @param localDate 开始时间
     * @param dayOfWeek 周几
     * @param n n周后
     * @return
     */
    public static LocalDate getNextWeekMonday(LocalDate localDate,DayOfWeek dayOfWeek,int n) {
        localDate = localDate.plusDays(n*7);
        return getCurrentWeekMonday(localDate,dayOfWeek);
    }
 
    /**
     * 获取开始时间的dayOfWeek的日期
     * @param dayOfWeek 周几
     * @param n n周后
     * @return
     */
    public static LocalDate getNextWeekMonday(DayOfWeek dayOfWeek,int n) {
        LocalDate localDate = LocalDate.now().plusDays(n*7);
        return getCurrentWeekMonday(localDate,dayOfWeek);
    }
}

二、测试代码

 public static void main(String[] args) {
        //日期
        LocalDate localDate = LocalDate.of(2022,8,26);
        //当前日期 2022-08-26
        System.out.println(localDate);
        //2022-08-26是那一年 2022
        System.out.println(localDate.getYear());
        //2022-08-26的月份 8
        System.out.println(localDate.getMonth().getValue());
        //2022-08-26是本月的第几天 26
        System.out.println(localDate.getDayOfMonth());
        //2022-08-26是周几 5
        System.out.println(localDate.getDayOfWeek().getValue());
        //2022-08-26是当年的第多少天 238
        System.out.println(localDate.getDayOfYear());
        System.out.println("------------");
        //获取2022-8-22前一个月 7
        System.out.println(MyDataTimeUtil.getLastMonth(localDate,1).getMonthValue());
        //获取2022-8-22后一个月 9
        System.out.println(MyDataTimeUtil.getNextMonth(localDate,1).getMonthValue());
        //获取2022-8-22,所在周的周一 2022-08-22
        System.out.println(MyDataTimeUtil.getCurrentWeekMonday(localDate,DayOfWeek.MONDAY));
        //获取2022-8-22,两周前的周五 2022-08-12
        System.out.println(MyDataTimeUtil.getLastWeekMonday(localDate,DayOfWeek.FRIDAY,2));
        //获取2022-8-22,一周后的周一 2022-08-29
        System.out.println(MyDataTimeUtil.getNextWeekMonday(localDate,DayOfWeek.MONDAY,1));
    }

相关文章
|
2月前
|
Java
Java基础之日期和时间
Java基础之日期和时间
26 1
|
1月前
|
前端开发 JavaScript Java
【前端学java】java中的日期操作(13)
【8月更文挑战第10天】java中的日期操作
18 2
【前端学java】java中的日期操作(13)
|
1月前
|
Java
比较两个日期是否相等Java
这篇文章提供了Java中比较两个日期是否相等的两种方法:使用`Calendar`类和`SimpleDateFormat`类来确定两个日期是否为同一天,并附有详细的代码示例和测试结果。
|
2月前
|
搜索推荐 Java 大数据
Java中的数据流处理与流式计算实现
Java中的数据流处理与流式计算实现
|
2月前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
2月前
|
Java API
Java基础之日期和时间
【7月更文挑战第4天】 Java日期时间API概览:Java 8之前,Date表示不可变时间点,Calendar用于计算,SimpleDateFormat处理格式化。Date的setXXX方法不推荐,Calendar支持加减操作。时区处理用TimeZone,Time仅处理时间(不含日期)。Java 8引入java.time包,提供Instant、LocalDate等线程安全类,改进了性能和易用性,支持时区和更复杂操作。后续将探讨Java 8的新特性!
30 1
|
2月前
|
安全 Java API
Java基础之日期和时间
【7月更文挑战第3天】 Java 8之前的日期时间处理涉及Date、Calendar、SimpleDateFormat及TimeZone类。Date是不可变对象,但不推荐直接调整时间。Calendar提供日期计算,而SimpleDateFormat用于格式化。Date和Calendar非线程安全,处理时区需用TimeZone。Java 8引入了java.time包,包含Instant、LocalDate等类,提供更现代、线程安全和高效的API,例如Instant用于时间戳,LocalDateTime表示日期和时间,ZonedDateTime处理时区。下节将探讨Java 8的新API。
97 2
|
2月前
|
Java API
Java中的日期和时间API详解
Java中的日期和时间API详解
|
3月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
43 2
|
3月前
|
Java API
探讨Java集合的组内平均值计算
探讨Java集合的组内平均值计算
28 1