当前位置: 首页 > 知识库问答 >
问题:

如何在java中找到两个日期之间的差异持续时间?

鲁烨熠
2023-03-14

我有两个DateTime对象,它们需要找出它们之间差异的持续时间,

我有以下代码,但不确定如何继续以达到以下预期结果:

示例:

      11/03/14 09:30:58
      11/03/14 09:33:43
      elapsed time is 02 minutes and 45 seconds
      -----------------------------------------------------
      11/03/14 09:30:58 
      11/03/15 09:30:58
      elapsed time is a day
      -----------------------------------------------------
      11/03/14 09:30:58 
      11/03/16 09:30:58
      elapsed time is two days
      -----------------------------------------------------
      11/03/14 09:30:58 
      11/03/16 09:35:58
      elapsed time is two days and 05 minutes
      

代码:

    String dateStart = "11/03/14 09:29:58";
    String dateStop = "11/03/14 09:33:43";

    Custom date format
    SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss");

    Date d1 = null;
    Date d2 = null;
    try {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateStop);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    // Get msec from each, and subtract.
    long diff = d2.getTime() - d1.getTime();
    long diffSeconds = diff / 1000 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;
    long diffHours = diff / (60 * 60 * 1000);
    System.out.println("Time in seconds: " + diffSeconds + " seconds.");
    System.out.println("Time in minutes: " + diffMinutes + " minutes.");
    System.out.println("Time in hours: " + diffHours + " hours.");

共有3个答案

颛孙飞鸾
2023-03-14

使用Joda时间库

DateTime startTime, endTime;
Period p = new Period(startTime, endTime);
long hours = p.getHours();
long minutes = p.getMinutes();

Joda Time有一个时间间隔的概念:

Interval interval = new Interval(oldTime, new Instant());

再举一个日期差异的例子

还有一个链接

或者使用Java-8(集成了Joda时间概念)

Instant start, end;//
Duration dur = Duration.between(start, stop);
long hours = dur.toHours();
long minutes = dur.toMinutes();
甘永春
2023-03-14

试试下面的方法

{
        Date dt2 = new DateAndTime().getCurrentDateTime();

        long diff = dt2.getTime() - dt1.getTime();
        long diffSeconds = diff / 1000 % 60;
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000);
        int diffInDays = (int) ((dt2.getTime() - dt1.getTime()) / (1000 * 60 * 60 * 24));

        if (diffInDays > 1) {
            System.err.println("Difference in number of days (2) : " + diffInDays);
            return false;
        } else if (diffHours > 24) {

            System.err.println(">24");
            return false;
        } else if ((diffHours == 24) && (diffMinutes >= 1)) {
            System.err.println("minutes");
            return false;
        }
        return true;
}
司寇望
2023-03-14

可以使用Java内置类TimeUnit更好地处理日期差异转换。它提供实用程序方法来做到这一点:

Date startDate = // Set start date
Date endDate   = // Set end date

long duration  = endDate.getTime() - startDate.getTime();

long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
long diffInDays = TimeUnit.MILLISECONDS.toDays(duration);
 类似资料:
  • 问题内容: 我有两个DateTime对象,需要找到它们之间的差值的持续时间, 我有以下代码,但不确定如何继续执行以获得预期的结果,如下所示: 例 码 问题答案: 尝试以下

  • 问题内容: 我有两个日期,格式如“ Ymd H:i:s”。我需要比较这两个日期并找出时差。 问题答案: 您可以将它们转换为时间戳,然后从那里开始: 除以3600是因为一小时内有3600秒,请避免使用很多小数位。

  • 问题内容: 如何分辨两个datetime物体之间的时间差(以分钟为单位)? 问题答案: 从第一次减去以后的时间将创建一个仅保留时差的对象。在上面的示例中,它是0分钟,8秒和562000微秒。

  • 我有DateTime字符串2020-04-03 01:29:27和2020-04-03 01:29:37我想得到持续时间在小时。我已经尝试了很多东西,但这却找不到任何帮助

  • 问题内容: 我必须找到java中两个不同日期对象之间的时间差异,如果该时间超过5秒,我必须使会话无效。 这是场景: 我有一个jsp页面,它每5秒设置一次会话 我还有另一个jsp页面,每1秒访问一次, 现在,我必须在我提到的另一个jsp中进行比较,并使会话无效, 因此,如果差异超过5秒,则会话无效。 问题答案:

  • 问题内容: 我正在使用ES,并且我需要一个查询,该查询返回两个datetime(mysql timediff)之间的差,但是还没有找到ES的任何功能来做到这一点。有人可以帮助我吗? MySQL查询 谢谢! 问题答案: 最好的是脚本字段。如果您已启用动态脚本并且这些日期字段在映射中定义为日期,则上述搜索查询应该可以正常工作。 请注意,您将获得epoch的结果,您需要将其转换为面额。 您可以在此处阅读