2013-11-20 77 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); 
}