Java 日期之间的天数(作业)

2023-11-29

当我运行该程序时,这是几天的休息时间。对我做错了什么有什么建议吗?

我知道有一种更简单的方法可以做到这一点,但为此我试图展示查找之间的天数的所有实际步骤。

家庭作业,因此不能使用日期时间库。

public class DaysBetween {

    public static void main (String []args) {

        long months1 = Long.parseLong(args[0]);
        long days1 = Long.parseLong(args[1]);
        long year1 = Long.parseLong(args[2]);
        long months2 = Long.parseLong(args[3]);
        long days2 = Long.parseLong(args[4]);
        long year2 = Long.parseLong(args[5]);

        long daysbetween = 0; 
        long leapyearcounter = 0;
        boolean leapyear1 = false;
        boolean leapyear2 = false;    
        boolean valid1 = true;
        boolean valid2 = true;
        int earlier = 0;

        // this tests to see which date is earlier
        if (year1 == year2){ 
            if (months1 == months2) {
                if (days1 == days2) {
                    daysbetween = daysbetween;
                } else if (days1 < days2) {
                    earlier = 1;
                }
            } else if (months1 < months2) {
            earlier = 1;
            }
        } else if (year1 < year2 ) {
            earlier = 1;
        }

        // this switches the dates depending on which is earlier
        switch(earlier) { 
        case 1: months1 = Long.parseLong(args[0]);
            days1   = Long.parseLong(args[1]);
            year1   = Long.parseLong(args[2]);
            months2 = Long.parseLong(args[3]);
            days2   = Long.parseLong(args[4]);
            year2   = Long.parseLong(args[5]);
        break;  
        default: 
            months1 = Long.parseLong(args[3]);
            days1   = Long.parseLong(args[4]);
            year1   = Long.parseLong(args[5]);
            months2 = Long.parseLong(args[0]);
            days2   = Long.parseLong(args[1]);
            year2   = Long.parseLong(args[2]);
        break;
        }

        //this section tests if the earlier date is valid
        if((year1 % 4 == 0) && (year1 % 100 != 0) || (year1 % 400 == 0)) {
            leapyear1 = true;
        }

        if ((leapyear1 == true) && (months1 == 2)) {
            if (days1 <= 29 && days1 >=1){
                valid1 = true;
            }
        } else if ((leapyear1 == false) && (months1 == 2)){
            if (days1 <= 28 && days1 >= 1){
                valid1 = true;
            }
        }

        if (months1 != 2) {
            if (months1 < 8 ) {
                if (months1 %2 != 0) {
                    if (days1 <= 31 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                } else if (months1 %2 == 0)  {
                    if (days1 <= 30 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                }
            } else if (months1 > 8) {
                if (months1 %2 != 0) {
                    if (days1 <= 30 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                } else if (months1 %2 == 0)  {
                    if (days1 <= 31 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                }
            }
        }

        // this section tests if the later date is valid
        if((year2 % 4 == 0) && (year2 % 100 != 0) || (year2 % 400 == 0)) {
            leapyear2 = true;
        }

        if ((leapyear2 == true) && (months2 == 2)) {
            if (days2 <= 29 && days2 >=1){
                valid2 = true;
            }
        } else if ((leapyear2 == false) && (months2 == 2)){
            if (days2 <= 28 && days2 >= 1){
                valid2 = true;
            }
        }

        if (months2 != 2) {
            if (months2 < 8 ) {
                if (months2 %2 != 0) {
                    if (days2 <= 31 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                } else if (months2 %2 == 0)  {
                    if (days2 <= 30 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                }
            } else if (months2 > 8) {
                if (months2 %2 != 0) {
                    if (days2 <= 30 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                } else if (months2 %2 == 0)  {
                    if (days2 <= 31 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                }
            }
        }

        //this adds a day to the total if the earlier date is in january & its a leap year
        if ((months1 == 1) && (leapyear1 == true)) {
            daysbetween = daysbetween +1;
        }

        //this adds the months left in year1
        if (months1 == 1) { 
            daysbetween = daysbetween + 334;
        } else if (months1 == 2) {
            daysbetween = daysbetween + 306;
        } else if (months1 == 3) {
            daysbetween = daysbetween + 275;
        } else if (months1 == 4) {
            daysbetween = daysbetween + 245; 
        } else if (months1 == 5) {
            daysbetween = daysbetween + 214;
        } else if (months1 == 6) {
            daysbetween = daysbetween + 184;
        } else if (months1 == 7) {
            daysbetween = daysbetween + 153;
        } else if (months1 == 8) {
            daysbetween = daysbetween + 122;
        } else if (months1 == 9) {
            daysbetween = daysbetween + 92;
        } else if (months1 == 10) {
            daysbetween = daysbetween + 61;
        } else if (months1 == 11) {
            daysbetween = daysbetween + 31;
        } else { }

        // this adds the extra day if year2 is leap year and if the month is march or later
        if ((months2 >= 3) && (leapyear2 = true)) { 
            daysbetween = daysbetween + 1;
        }

        // this adds the months up to the month in year2
        if (months2 == 1) { 
            daysbetween = daysbetween;
        } else if (months2 == 2) {
            daysbetween = daysbetween + 31;
        } else if (months2 == 3) {
            daysbetween = daysbetween + 59;
        } else if (months2 == 4) {
            daysbetween = daysbetween + 90; 
        } else if (months2 == 5) {
            daysbetween = daysbetween + 120;
        } else if (months2 == 6) {
            daysbetween = daysbetween + 151;
        } else if (months2 == 7) {
            daysbetween = daysbetween + 181;
        } else if (months2 == 8) {
            daysbetween = daysbetween + 212;
        } else if (months2 == 9) {
            daysbetween = daysbetween + 243;
        } else if (months2 == 10) {
            daysbetween = daysbetween + 273;
        } else if (months2 == 11) {
            daysbetween = daysbetween + 304;
        } else  if (months2 == 12) {
            daysbetween = daysbetween + 334;
        } else { }

        //this add the days left in month1
        if (months1 != 2) { 
            if (months1 < 8 ) {
                if (months1 %2 != 0) {
                    daysbetween = daysbetween + (31 - days1);
                } else if (months1 %2 == 0) {
                    daysbetween = daysbetween + (30 - days1);
                }
            } else if (months1 > 8) {
                if (months1 %2 != 0) {
                    daysbetween = daysbetween + (30 - days1);
                } else if (months1 %2 == 0)  {
                    daysbetween = daysbetween + (31 - days1);
                }
            }
        }

        // this add the days left in month1 if its feb
        if ((leapyear1 == true) && (months1 == 2)) { 
            daysbetween = daysbetween + (29 - days1);
        } else {
            daysbetween = daysbetween + (28 - days1);
        }

        daysbetween = daysbetween + days2; // adds the days left in month2
        daysbetween = daysbetween + ((((year2-1)-(year1+1))+1)*365); // adds the days in the years to the total

        for (long i = (year1+1); i < (year2-1) ; i++) { // sees the # of leapyears b/n year1 & year2
            if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)) {
                leapyearcounter++;
            }
        }

        daysbetween = daysbetween + leapyearcounter; // adds the leapyear days

        if ((valid1 == false) || (valid2 == false)) {
            System.out.println("Sorry! You gave me one or more invalid dates!");
        } else if (daysbetween == 1){
            System.out.println("There is " + daysbetween + " day between those two dates!");
        } else if (daysbetween != 1) {
            System.out.println("There are " + daysbetween + " days between those two dates!");
        } else if (daysbetween == 0) {
            System.out.println("There are no days between those two dates!");
        }
    }
}

除非这个作业或者只是你要做的一些自伤的事情,我可以建议使用乔达时间库对于所有日期时间计算:

使用 joda 答案的时间:约 22 分钟

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 日期之间的天数(作业) 的相关文章

  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

    我创建了一个 RestController 如下所示 RestController public class GreetingController RequestMapping value greetings method RequestM
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 了解日期并使用 R 中的 ggplot2 绘制直方图

    主要问题 当尝试使用 ggplot2 制作直方图时 我无法理解为什么日期 标签和中断的处理无法像我在 R 中预期的那样工作 我在找 我的约会频率的直方图 刻度线位于匹配条下方的中心 日期标签在 Y b format 适当的限制 最小化网格空
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级

随机推荐

  • 用于设置类的 CKEditor 插件

    我想做的是类似于本机前景色 背景颜色对话框 不同之处在于 它将直接在工具栏中包含带有颜色的按钮 所以一个插件必须有多个按钮 具有不同的样式 颜色 另一个问题是 这个原生插件设置了 CSScolor and background color特
  • 什么是“装饰器”以及它们如何使用?

    我很好奇 AngularJS 中的装饰器到底是什么 除了装饰器中的简介之外 网上没有太多关于装饰器的信息AngularJS 文档并在一个简短的 尽管有趣的 提及Youtube 视频 正如 Angular 的人所说 装饰器是 服务的装饰 允许
  • 音频和视频等大文件的数据库

    我的应用程序创建了大量文件 每个文件最大 100MB 目前我们将这些文件存储在运行良好的文件系统中 但我想知道是否有更好的解决方案将文件存储在某种文件数据库中 数据库的一个简单优点是它可以分割文件并存储在小块中 而不是一个 100mb 的文
  • 使用 shebang 通过 subprocess.call 执行 python 脚本

    我正在用 Python 3 编写一个 某种程度上 模块化应用程序 我想从中运行任意程序 该程序是在运行时指定的 而不一定是 python 脚本 所以我用例如 subprocess call spam i eggs o ham If spam
  • 带有自定义标签的 CSS 宽度

    我无法获取适用于我的自定义标签的宽度和高度属性 请参阅下面的代码 CSS x slider width 1000px height 300px border 1px black solid background color 0000ff H
  • 在.NET中获取用户的Exchange服务器和电子邮件地址

    嗨 我想知道我的用户的 Exchange 服务器的地址 假设她位于典型的 Windows 办公网络中 这是在 C 应用程序中 我已经有了用户的电子邮件地址 我在以下位置找到了它System DirectoryServices Account
  • 类依赖工具

    我正在寻找一个 最好是开源 工具 在给定大量 C C 代码的情况下 该工具将生成类 C 和 或文件 C 之间依赖关系的可视化或 XML 图表 这个想法是 如果您必须将代码转换为另一种语言 您希望能够首先编译最低级别的类 然后从那里开始构建
  • 在 Apache Flink 中使用 DynamoDB 流

    有人尝试过在 Apache Flink 中使用 DynamoDB 流吗 Flink 有一个 Kinesis 消费者 但我正在寻找如何直接使用 Dynamo 流 DataStream
  • Windbg:是否可以在我自己的程序中嵌入Windgb引擎?

    我想编写一个调试 诊断工具 它可以调用 Windbg 函数来检查转储文件 而不是编写 Windbg 扩展 这可能吗 有什么参考吗 多谢 您可以使用 dbghelp dll 中实现的调试 API 而不是 WinDbg 它记录在MSDN 该参考
  • 用指针修改字符串[重复]

    这个问题在这里已经有答案了 这两个代码必须改变字符2在角色中 4 int main int argc char argv char s hello s 2 4 printf s n s return 0 当我运行此命令时 我会遇到分段错误
  • Python 和 MySQLdb:表替换导致语法错误

    我需要时不时地动态更改表和变量 所以我写了一个像这样的python方法 selectQ SELECT FROM s WHERE s s self db execute selectQ self table self columnSpecNa
  • F# 中“>>”运算符的语义

    在微软的F 样本 他们使用 gt gt 运算符 如下所示 test gt Seq iter any to string gt gt printfn line s gt gt 运算符在这种情况下做什么 序列中的每个项目 在本例中为数组 是否被
  • .NET 异步流读/写

    我一直在尝试解决这个 并发编程 考试练习 C 知道Stream类包含int Read byte buffer int offset int size and void Write byte buffer int offset int siz
  • Html / Php 表单未添加到 SQL 数据库

    我已经为此工作了几个小时 包括重建我的整个代码 我无法弄清楚出了什么问题 HTML 表单应该填充患者 SQL 数据库 但它不起作用 我在网站的另一部分使用了一个类似的表格 该表格可以完美地工作 但这个表格似乎不起作用 并且无法弄清楚为什么
  • MySQL REPEATABLE-READ Workbench 事务级别未设置

    我们在 my ini 文件中设置了以下内容 mysql 事务隔离 已提交读 我们假设此设置将是所有用户会话的默认设置 使用 PHPMyAdmin 登录时 tx isolation 设置正确并且按预期工作 然而 当使用 MySQL Workb
  • 拖放在 C# 中不起作用

    我在 C 中创建了一个拖放控件 以允许人们将文件拖放到我的表单上 这是我遇到的问题 调试时工作正常 但是 当以管理员模式运行我的程序时 它不起作用 这有什么原因吗 这是我的代码 private void panel1 DragEnter o
  • .NET 24 小时格式时间的正则表达式

    我可以在 NET 中有一个正则表达式吗 它只允许文本框中使用 24 小时时间格式 Thanks 此致 多发性硬化症 正则表达式 时间 hh mm 验证 24 小时格式 0 1 d 2 0 3 0 5 d 如果你也需要几秒钟 0 1 d 2
  • 使用 HTML 的 PHP 表格

    我的目标是使用一个 txt 文件 其中包含填写表单的特定响应所需的数据 该表格应该有用户名和密码 此外 还可以在表单上设置价格范围参数 用户名可以任意大小写 但密码区分大小写 我已经创建了我将使用的 html 表单 txt 文件中的数据包含
  • 使用函数参数进行回文条件检查[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 这是使用函数参数来检查字符串是否回文的 php 代码
  • Java 日期之间的天数(作业)

    当我运行该程序时 这是几天的休息时间 对我做错了什么有什么建议吗 我知道有一种更简单的方法可以做到这一点 但为此我试图展示查找之间的天数的所有实际步骤 家庭作业 因此不能使用日期时间库 public class DaysBetween pu