用Java计算两个日期之间的天数

2023-11-25

我想要一个计算两个日期之间的天数的 Java 程序。

  1. 输入第一个日期(德语表示法;带空格:“dd mm yyyy”)
  2. 输入第二个日期。
  3. 该程序应计算两个日期之间的天数。

如何包含闰年和夏令时?

My code:

import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class NewDateDifference {

    public static void main(String[] args) {

        System.out.print("Insert first date: ");
        Scanner s = new Scanner(System.in);
        String[] eingabe1 = new String[3];

        while (s.hasNext()) {
            int i = 0;
            insert1[i] = s.next();
            if (!s.hasNext()) {
                s.close();
                break;
            }
            i++;
        }

        System.out.print("Insert second date: ");
        Scanner t = new Scanner(System.in);
        String[] insert2 = new String[3];

        while (t.hasNext()) {
            int i = 0;
            insert2[i] = t.next();
            if (!t.hasNext()) {
                t.close();
                break;
            }
            i++;
        }

        Calendar cal = Calendar.getInstance();

        cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert1[0]));
        cal.set(Calendar.MONTH, Integer.parseInt(insert1[1]));
        cal.set(Calendar.YEAR, Integer.parseInt(insert1[2]));
        Date firstDate = cal.getTime();

        cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert2[0]));
        cal.set(Calendar.MONTH, Integer.parseInt(insert2[1]));
        cal.set(Calendar.YEAR, Integer.parseInt(insert2[2]));
        Date secondDate = cal.getTime();


        long diff = secondDate.getTime() - firstDate.getTime();

        System.out.println ("Days: " + diff / 1000 / 60 / 60 / 24);
    }
}

UPDATE:2013 年的原始答案现在已经过时了,因为一些课程已被替换。执行此操作的新方法是使用新的java.time类。

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";

try {
    LocalDateTime date1 = LocalDate.parse(inputString1, dtf);
    LocalDateTime date2 = LocalDate.parse(inputString2, dtf);
    long daysBetween = Duration.between(date1, date2).toDays();
    System.out.println ("Days: " + daysBetween);
} catch (ParseException e) {
    e.printStackTrace();
}

请注意,此解决方案将给出实际的 24 小时天数,而不是日历天数。对于后者,使用

long daysBetween = ChronoUnit.DAYS.between(date1, date2)

原答案(从 Java 8 开始已过时)

您正在对字符串进行一些不必要的转换。有一个SimpleDateFormat类 - 试试这个:

SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";

try {
    Date date1 = myFormat.parse(inputString1);
    Date date2 = myFormat.parse(inputString2);
    long diff = date2.getTime() - date1.getTime();
    System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
    e.printStackTrace();
}

EDIT:由于已经对这段代码的正确性进行了一些讨论:它确实考虑了闰年。但是,那TimeUnit.DAYS.convert由于毫秒转换为天,函数会失去精度(有关更多信息,请参阅链接的文档)。如果这是一个问题,diff也可以手动转换:

float days = (diff / (1000*60*60*24));

请注意,这是一个float值,不一定是int.

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

用Java计算两个日期之间的天数 的相关文章

随机推荐

  • 提升::变体; std::unique_ptr 和复制

    这个问题确定了不可复制类型不能与Boost变体一起使用 Tree class template
  • SIMD 常量浮点数

    我一直在尝试使用微软的 sse 内在函数来优化一些代码 优化代码时最大的问题之一是每当我想使用常量时就会发生 LHS 似乎有一些关于生成某些常量的信息 here and 此处 第 13 4 节 但都是组装 我宁愿避免 问题是 当我尝试使用内
  • 如何在 IIS 中使用性能计数器和 WCF 服务?

    Hi 我在 IIS7 中有一个 WCF 服务 它通过 TCP WAS 与 winform 应用程序进行通信 现在我需要监视性能 我已将其添加到 web config 文件中
  • 并发调用单例对象的Java方法

    我有一个关于 Java 中多线程方法调用的问题 假设我们有一个单例对象 其类声明如下 public class SomeClass public void someMethod SomeValueObject object if objec
  • 带有连接字符串的实体框架 DbContext 构造函数

    有人可以帮助我理解以下两种将连接字符串传递给的方法DbContext 方法 1 public EWebDBContextEMS base mainConnectionString 和方法 2 public EWebDBContextEMS
  • Swift 中“static var”和“var”的区别

    Swift 中 static var 和 var 的主要区别是什么 有人可以用一个小例子向我解释这种差异吗 static var属于类型本身 而var属于类型的实例 特定类型的特定值 例如 struct Car static var num
  • PropertySource 在 ConditionalOnExpression 评估期间不可用

    我有以下组件类 我想根据属性实例化它 Component componentA PropertySource classpath components properties ConditionalOnExpression component
  • android4.0中按串行顺序执行异步任务

    我已经实现了2个异步任务 我使用的是android4 0 其中一个异步任务连续执行 第二个异步任务根据需要执行 可能多次 例如 class AsynTask1 exetends AsyncTask
  • 在 Scala 中,我如何将事件驱动编程与函数式方法结合起来?

    为了澄清事件驱动的含义 我指的是一种情况 def onTrade 每次特定股票交易时都会调用它 假设我想跟踪每日最高交易价格 对我来说 显而易见的解决方案是 var dailyHigh 0 def onTrade if price gt d
  • 汇编语言中的伪随机生成器

    我需要一个用于课程中分配的汇编程序的伪随机数生成器算法 并且我更喜欢一个简单的算法 但是 我无法使用外部库 什么是好的 简单的汇编伪随机数生成器算法 简单的方法是选择两个大的相对素数 a 和 b 然后继续将随机数乘以 a 并加上 b 使用模
  • 如何根据模式将列表拆分为子集?

    我正在这样做 但感觉这可以用更少的代码来实现 毕竟是Python 从列表开始 我根据字符串前缀将该列表拆分为子集 Splitting a list into subsets expected outcome sub 0 a sub 0 b
  • python中的三重引号

    所以我明白如果我执行以下操作 print Anything I type in here works Multiple LINES woohoo 但是如果下面是我的 python 脚本怎么办 This is my python Script
  • 带有“--enable-shared”标志的奇怪 Python 编译结果

    我正在使用 Debian 附带 Python 2 7 3 尝试从源代码编译 Python 2 7 6 以便与 mod wsgi 和 Apache 一起使用 根据众多答案 显然 在编译 mod wsgi 用法时 您必须使用 enable sh
  • 如何创建对角分割且两半可单击的布局?

    我需要创建一个布局 将屏幕对角线分成两个部分 并以不同的颜色作为背景 像这样的 我怎样才能实现这个目标 这可以按如下方式完成 创建一个FrameLayout 假设 50x50 像素 创建两个ImageViews 在FrameLayout并将
  • 从 Azure Active Directory 获取个人资料图片

    我们已将 Azure AD 设置为应用程序中的身份提供商 我们希望在应用程序中显示应来自 Azure AD 的个人资料图片 为了进行测试 我在 Azure AD 中添加了一个 Windows Live Id 帐户 具有个人资料图片 然后我们
  • 将模型中没有的字段添加到 Django REST 框架中的序列化器

    我有一个模型注释 创建时可能会也可能不会创建新用户 因此 我的 API 在创建新评论时需要密码字段 这是我的评论模型 class Comment models Model commenter models ManyToManyField C
  • 如何使用结构体属性设置默认值?

    我想知道如何将 DefaultValue 属性应用于结构属性 您可以注意到 Microsoft 使用表单的大小和许多其他属性来实现这一点 它们的值的类型是 Size Point 等 我想对我的自定义结构做同样的事情 DefaultValue
  • 如何在Python中获取匹配行之后的行

    我是一个业余爱好者 断断续续地使用 Python 一段时间了 抱歉 如果这是一个愚蠢的问题 但我想知道如果输入文件中的格式如下所示 是否有人知道一种简单的方法来获取一堆行 标题 1 Line 1 Line 2 Line 3 标题 2 Lin
  • 创建忽略鼠标和按键事件的 JavaFX 透明窗口

    我想制作一个 JavaFX 应用程序 基本上用一个覆盖整个用户屏幕Canvas对象 所以基本上我可以在用户屏幕上绘制任何内容 制作一个覆盖整个屏幕的窗口很简单 通过本教程可以使其基本上透明 https assylias wordpress
  • 用Java计算两个日期之间的天数

    我想要一个计算两个日期之间的天数的 Java 程序 输入第一个日期 德语表示法 带空格 dd mm yyyy 输入第二个日期 该程序应计算两个日期之间的天数 如何包含闰年和夏令时 My code import java util Calen