计算两次之间的差异时得到不正确的结果

时间:2017-10-13 02:39:26

标签: java time simpledateformat

我正在使用Android应用程序来跟踪登录和退出之间的小时数。 员工可以在一天内登记并在第二天或同一天内退出。

在app中,我有一个应该计算两次之间差异的函数。

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

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'

正如您所看到的......第一次测试正常,但第二次测试失败。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

您目前正在计算(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.'

答案 1 :(得分:1)

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));