【发布时间】: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。这意味着没有小数位。您必须先将其中一个值转换为float或double。 -
@Powerlord 我做了您推荐的更改,并且得到了小数的答案,ty。但正如您在我的代码示例的 cmets 中看到的那样,“测试 2”仍在打印不正确的值。
-
看看
System.out.println(difference); -
@ScaryWombat 我添加了两行来打印'difference'的值,请参阅代码示例。对我帮助不大。
-
如果 end 小于 start 你需要做两个总和 (12 - 11) + (7:30 - 0)
标签: java time simpledateformat