2013-07-17 86 views
0

在我的應用程序中,我必須比較存儲在整數變量中的兩個時間值。這裏的所有值都是24小時格式。我用這個代碼生成值:保存並比較整數的時間

Calendar c = Calendar.getInstance(); 

int startTime = startHour * 60 + startMin; 
int endTime = endHour * 60 + endMin; 
int now  = c.get(Calendar.HOUR_OF_DAY) * 60 + c.get(Calendar.MINUTE); 

現在我要檢查,如果currentTimestartTimeendTime之間。當然,我也有這個情況檢查:

if(startTime <= now && endTime >= now) 
// between... 

這一工程在大多數情況下,偉大的,但如果startTime比的原因這是行不通的endTime更大。我們以這個例子爲例:現在是02:00點

int startTime = 1395; // 23:15 
int endTime = 270; // 04:30 
int now  = 120; // 02:00 

現在if條件不起作用。任何想法如何我可以解決這個問題?我必須將值保存在整數變量中,而不是日曆或日期對象或其他東西。

順便說一句,我認爲這個想法(而不是我自己的)以這種方式存儲時間只有整數很好。它使用更少的內存,並且使用modulodivider運營商,可以輕鬆獲得真實的小時和分鐘。

回答

1

只需編輯你的if語句來檢查startTime是否在不同的日子(startTime> endTime)。如果是這樣,「現在」是在那些之間,如果它要麼> =開始時間或< =結束時間:

if(startTime <= now && endTime >= now || (startTime > endTime && (now <= endTime || now >= startTime))) 
+0

你是對的謝謝你!我花這麼多時間在這個問題上,我忘記檢查'startTime> endTime'。這當然很重要。謝謝! – Cilenco

+0

沒問題,這是一件很好的事情要解決,我同意這是一個很酷的處理時間的方式! – SharkofMirkwood

0

你可能早歸的變量,從而使後來的代碼更簡單,更易於閱讀:

public void doSomething(int st, int et) { 
    int startTime = Math.min(st, et); 
    int endTime = Math.max(st, et); 
    ... 

日曆和日期都是非常直觀的工作;如果你將會進行大量的時間操作,Joda Time可能是一個更好的選擇,對類似時間段和持續時間的類進行比較。