计算两次之间的差异时得到不正确的结果
Getting incorrect results when calculating difference between two times
我正在开发一个 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) 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.'
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));
我正在开发一个 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) 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.'
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));