2013-11-20 50 views
0

我提出了一个方法来停止两次给定时间的程序。两次给定时间之间的等待时间

Time end = ... 
Time begin =.... 
if (end.getHours() == begin.getHours()) { 
    Thread.sleep((end.getMinutes()-begin.getMinutes())*60000); 
} else { 
    Thread.sleep(((60-begin.getMinutes())+ (end.getMinutes())+(end.getHours()-begin.getHours())*60)*60000); 
} 

您怎么看?有更容易的方法吗?

+0

您遇到的问题是没有时间值的上下文。如果开始时间在午夜之前,结束时间是午夜之后会发生什么? – MadProgrammer

+0

begin总是至少<= end,这就是为什么我这样命名; 和都属于同一天,这就是为什么是时间对象,而不是日期 – Kao

回答

0

你怎么看待呢?有更容易的方法吗?

因为我认为你是在谈论java.sql.Time延伸java.util.Date,我会用getTime()方法来获取时间以毫秒:

Thread.sleep(end.getTime() - begin.getTime()); 

任何转换必要的。任何使用已弃用的getHours()getMinutes()方法的解决方案都将在夏时制转换过程中出现问题,因为小时数将跳过。

+0

很好的解决方案,谢谢! – Kao

1

您的解决方案看起来相当复杂,因此可能是错误的。

由于它看起来像功课,我会给你一个提示。尝试首先以更简单的度量单位转换时间,然后再考虑这一点。

例如,由于一天的开始中的分钟数两次转换,然后减去那些:

  • 7.30 - > 450
  • 8.10 - > 490
  • 差异:490-450 = 40分钟
+0

这假定时间是在一天之内。如果开始时间在午夜之前,结束时间在午夜之后(第二天),会发生什么情况? :P – MadProgrammer

+0

迄今为止最好的解决方案! – Kao

+0

处理分钟/小时/等的方法。已弃用,不应使用,因为他们不会使用夏令时等。请参阅我的答案。 – Gray

0

在你的代码的其他部分,因为你有

(60 begin.getMinutes())

你将不得不从总数中减去60分钟,所以代码不会像这样工作。另外,你需要另外一对括号。相反,试试这个:

else{ 
    Thread.sleep(((end.getMinutes()-begin.getMinutes())+(end.getHours()-begin.getHours())*60)*6000); 
}