【问题标题】:Getting incorrect results when calculating difference between two times计算两次之间的差异时得到不正确的结果
【发布时间】:2017-10-13 02:39:26
【问题描述】:

我正在开发一个 Android 应用程序来跟踪登录和退出之间的时间。 员工可以一天签到,第二天或当天签出。

在应用程序中,我有一个函数可以计算两次之间的差异。

但我没有得到正确的结果......

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("h:mma");

    Date start;
    Date end;
    double difference;

    //Test 1
    start = simpleDateFormat.parse("7:00AM");
    end = simpleDateFormat.parse("3:30PM");
    difference = end.getTime() - start.getTime();
    Log.d("difference", String.valueOf(difference)); // 3.06E7
    Log.d("Time difference", String.valueOf(((difference/1000)/60)/60));
    //Prints '8.5' correct.

    // Text 2
    start = simpleDateFormat.parse("11:00PM");
    end = simpleDateFormat.parse("7:30AM");
    difference = end.getTime() - start.getTime();
    Log.d("difference2", String.valueOf(difference)); // -5.58E7
    Log.d("Time difference2", String.valueOf(((difference/1000)/60)/60));
    //Prints '-15.5' but should print '8.5'

如您所见...第一个测试工作正常,但第二个测试失败。 我该如何解决这个问题?

【问题讨论】:

  • A long / long 将始终返回 long。这意味着没有小数位。您必须先将其中一个值转换为 floatdouble
  • @Powerlord 我做了您推荐的更改,并且得到了小数的答案,ty。但正如您在我的代码示例的 cmets 中看到的那样,“测试 2”仍在打印不正确的值。
  • 看看System.out.println(difference);
  • @ScaryWombat 我添加了两行来打印'difference'的值,请参阅代码示例。对我帮助不大。
  • 如果 end 小于 start 你需要做两个总和 (12 - 11) + (7:30 - 0)

标签: java time simpledateformat


【解决方案1】:

您当前的问题是您正在计算两个小时之间的差异,而这些小时在技术上是在同一天。

您当前正在计算(A) Day 1: 23:00(b) Day 1: 7:30 之间的时间差。 7:30 是 23:00 之前的 15.5 小时。

您需要添加开始日期和结束日期。

示例:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

Date day1 = simpleDateFormat.parse("12/10/2017 23:00:00");
Date day2 = simpleDateFormat.parse("13/10/2017 07:30:00");

DateTime dt1 = new DateTime(day1);
DateTime dt2 = new DateTime(day2);

System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes.");
// Should print "8 hours, 30 minutes.'

【讨论】:

    【解决方案2】:

    startend 之后(同一天),因此结果为负; -15.5 + 24 == 8.5。模 24 是有序的:

    difference = end.getTime() - start.getTime();
    difference = difference/1000/60/60;
    if (difference < 0) {
        difference += 24;
    }
    Log.d("Time difference", String.valueOf(difference));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多