我正在使用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'
正如您所看到的......第一次测试正常,但第二次测试失败。 我该如何解决这个问题?
答案 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)
start
在end
之后(同一天),因此结果为负; -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));