我正在尝试解决我必须要做的任务,即计算星际时间和比赛结束时间之间的秒数。格式为hhmmss。用秒数最终计算小时分钟和秒的结果。这是一个非客观编程的初学者课程,所以我使用的代码必须简单,没有任何额外的类来处理时间。我问的原因是因为我的计算有时会计算出错误的结果。我这样做了:
totalAmountOfSecondsPerHour = (endHour - startHour) * 3600;
totalAmountOfMinutesPerMinutes = Math.abs((endMinutes - startMinutes) * 60);
totalAmountOfSeconds = Math.abs(endSeconds - startSeconds));
我使用Math.abs来消除负数。
要以秒为单位获取总金额,我会添加所有变量。最后,为了得到hhmmss的结果时间,我喜欢这样:
resultHour = totalAmountOfSeconds / 3600;
rest totalAmountOfSeconds % 3600;
resultMinutes = rest / 60;
resultSeconds = rest % 60;
当我输入像150030这样的开始时间和结束时间如165015时,结果是1小时50分15秒。如果它是45秒,我想我应该更正确!?在我的计算中可能出现什么问题?是否有更好的方法或者我可以修改或简化我的代码以获得正确的结果?提供一些帮助!谢谢!
答案 0 :(得分:3)
这是因为您使用Math.abs()
让我们举个小例子:应用程序从00:00:59开始,2秒后结束,所以00:01:01
totalAmouneOfMinutesPerMinutes = Math.abs(1 - 0) * 60 = 60
totalAmountOfSeconds = Math.abs(1 - 59) = 58
所以60 + 58 = 118秒而不是2.如果我们删除Math.abs,我们将会:
totalAmouneOfMinutesPerMinutes = (1 - 0) * 60 = 60
totalAmountOfSeconds = (1 - 59) = -58
60 +(-58)= 2秒(就像它假设的那样)。
答案 1 :(得分:2)
对于你的秒计算,你基本上是在做
15 - 30 = -15 ABS(-15)= 15
所以这是你的问题。
您可能想尝试如果秒数为负,则添加60。
答案 2 :(得分:1)
以开始时间为例:1:10:10和结束时间1:11:05显然差异应该是55秒。
但你做了秒(5-10)秒并得到5秒。你得到1分5秒。
你有两种方法可以解决这个问题:摆脱绝对,如果你得到负面结果,那么将(负)数量加到下一个“更高”值的数量上。
因此在示例中,不是将abs(-5)添加到1分钟,而是添加-5到1分钟,结果为0分55秒。
虽然这会起作用,但会让人感到困惑。
更好的方法是:将开始和结束时间转换为秒。与众不同。将结果转换回小时,分钟和秒
答案 3 :(得分:0)
那些Math.abs绊倒了你...将时间转换为秒,进行减法,然后转换回hh mm ss格式。