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));
    }

相关文章
|
5月前
|
机器学习/深度学习 Java 编译器
解锁硬件潜能:Java向量化计算,性能飙升W倍!
编译优化中的机器相关优化主要包括指令选择、寄存器分配、窥孔优化等,发生在编译后端,需考虑目标平台的指令集、寄存器、SIMD支持等硬件特性。向量化计算利用SIMD技术,实现数据级并行,大幅提升性能,尤其适用于图像处理、机器学习等领域。Java通过自动向量化和显式向量API(JDK 22标准)支持该技术。
264 4
|
3月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
235 0
|
6月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
392 14
|
5月前
|
安全 Java API
Java日期时间API:从Date到Java.time
本文深入解析了Java 8中引入的全新日期时间API,涵盖LocalDate、LocalTime、LocalDateTime、ZonedDateTime等核心类的使用,以及时间调整、格式化、时区处理和与旧API的互操作。通过实例对比,展示了新API在可变性、线程安全与易用性方面的显著优势,并提供迁移方案与实战技巧,助你掌握现代Java时间处理的最佳实践。
|
6月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
328 14
|
存储 Java
java中的常见运算符的计算方式
本文介绍了计算机中二进制数的原码、反码和补码的概念及其转换方式。原码是符号位加真值的绝对值;反码中正数不变,负数其余位取反;补码在反码基础上加1。文章还详细解释了Java中的常见运算符(如按位与、或、异或、移位等)如何基于二进制进行计算,并探讨了使用补码的原因,包括统一符号位处理和扩展表示范围。通过具体代码示例帮助理解这些概念。
188 6
java中的常见运算符的计算方式
|
存储 JavaScript Java
如何在Java中计算绝对值
绝对值表示一个数离0的距离,总是非负的。在Java中,可以通过`Math.abs()`函数或`if-else`条件语句来计算绝对值。使用`Math.abs()`可直接将负数转为正数,而`if-else`则根据条件判断是否取反。本文介绍了这两种方法的具体实现步骤和代码示例,并展示了如何通过用户输入获取数值并输出其绝对值。此外,还提供了完整的代码和编译执行的方法。
588 6
如何在Java中计算绝对值
|
11月前
|
Java
Java计算时间差
这段代码提供了两个方法来计算时间差。`timeDistance` 方法接收两个 `Date` 对象,计算并返回两者之间的天数、小时数和分钟数差异,格式为“X天Y小时Z分钟”。`hourDistance` 方法则接收两个时间字符串,解析后计算并返回两者之间相差的小时数(向上取整)。
568 4
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
238 26
|
Java API 调度
Java 日期与时间处理:精准掌控时间流转
Java 8引入了全新的日期和时间API,解决了旧版`java.util.Date`和`Calendar`类设计不佳、操作繁琐的问题。新API包括`LocalDate`、`LocalTime`和`LocalDateTime`类,操作简洁直观,符合日常思维习惯。同时提供了`Period`和`Duration`处理时间间隔,以及`DateTimeFormatter`进行格式化输出。这些改进使开发者能更高效、准确地处理日期和时间,极大提升了开发效率与代码质量。 (239字符)
276 6