Java 输入两个日期,计算出期间的周数

简介: Java 输入两个日期,计算出期间的周数

只要涉及到其他周的天,都算期间的周数:


    static int calculate(Calendar c){
        int dayForWeek;
        if(c.get(Calendar.DAY_OF_WEEK) == 1){
            dayForWeek = 7;
        }else{
            dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;}
        return dayForWeek;
    }
    static Calendar From(Calendar c){
        switch(calculate(c)){
            case 1:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-0);
                break;
            case 2:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-1);
                break;
            case 3:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-2);
                break;
            case 4:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-3);
                break;
            case 5:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-4);
                break;
            case 6:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-5);
                break;
            case 7:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-6);
        }
        return c;
    }
    static Calendar To(Calendar c){
        switch(calculate(c)){
            case 1:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+6);
                break;
            case 2:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+5);
                break;
            case 3:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+4);
                break;
            case 4:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+3);
                break;
            case 5:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+2);
                break;
            case 6:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+1);
                break;
            case 7:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+0);
        }
        return c;
    }
    static Long getResult(String startDate,String endDate) throws ParseException {
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        c1.setTime(sdf.parse(startDate));
        c2.setTime(sdf.parse(endDate));
        long cc1=From(c1).getTimeInMillis()/(1000*3600*24);
        long cc2=To(c2).getTimeInMillis()/(1000*3600*24);
        return (cc2-cc1+1)/7;
    }


测试:


image.png


刚好一周:


    public static void main(String[] args) throws ParseException {
        Long result = getResult("2020-02-10", "2020-02-16");
        System.out.println("涉及的周数为:"+result);
    }

image.png


刚好两周:


    public static void main(String[] args) throws ParseException {
        Long result = getResult("2020-02-10", "2020-02-23");
        System.out.println("涉及的周数为:"+result);
    }

image.png


两周再多两天:


    public static void main(String[] args) throws ParseException {
        Long result = getResult("2020-02-10", "2020-02-25");
        System.out.println("涉及的周数为:"+result);
    }

image.png

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