2010-04-22 63 views
2

在使用的時候,我有很多的格式爲HH時間信息:MM,我想知道是否有采取這一信息,並將它與當前時間的好辦法。假設我有一天的時間列表,我想知道這個字符串數組中的哪一個時間是第一個在這一天還沒有經過的時間。Android平臺

我在看日曆API,並且我想我可以通過分裂它打破串分成小時和分鐘「:」,然後創建從一個日曆對象,但似乎相當低效。

只是尋找一些輸入;謝謝, 羅布

<string-array name="example"> 
    <item>6:58</item> 
    <item>7:41</item> 
    <item>8:08</item> 
    <item>8:28</item> 
    <item>8:48</item> 
    <item>9:08</item> 
    <item>9:43</item> 
    <item>10:13</item> 
    <item>10:43</item> 
    <item>11:13</item> 
    <item>11:43</item> 
    <item>12:09</item> 
    <item>12:29</item> 
    <item>12:49</item> 
    <item>1:09</item> 
    <item>1:29</item> 
    <item>1:49</item> 
    <item>2:09</item> 
    <item>2:29</item> 
    <item>2:49</item> 
    <item>3:09</item> 
    <item>3:29</item> 
    <item>3:49</item> 
    <item>4:09</item> 
    <item>4:29</item> 
    <item>4:49</item> 
    <item>5:09</item> 
    <item>5:29</item> 
    <item>5:49</item> 
    <item>6:29</item> 
    <item>7:09</item> 
    <item>7:47</item> 
    <item>8:27</item> 
    <item>9:07</item> 
    <item>9:47</item> 
    <item>10:27</item> 
</string-array> 

回答

3

創建實現了RandomAccess爲您的數據的ArrayList。在你的小時:分鐘對象上實現一個比較器。把你的數組放入這個列表中進行處理和排序。

抓住從以正常方式當前時間的小時和分鐘。

執行一個Collections.binarySearch()來獲取匹配或者是排在後面,並返回它的列表項的索引(這是的binarySearch的默認行爲)。

import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Collections; 
import java.util.GregorianCalendar; 
import java.util.RandomAccess; 

public class scratchpad { 
public static void main(String [] args){ 
    String[] hourMinuteStringArray = {"6:58","7:41","8:08","8:28","8:48","9:08","9:43","10:13","10:43","11:13","11:43","12:09","12:29","12:49","13:09","13:29","13:49","14:09","14:29","14:49","15:09","15:29","15:49","16:09","16:29","16:49","17:09","17:29","17:49","18:29","19:09","19:47","20:27","21:07","21:47","22:27"}; 
    HourMinuteList hourMinuteList = convertHMStringArrayToHMArray(hourMinuteStringArray); 
    Collections.sort(hourMinuteList); 
    Calendar calendar = new GregorianCalendar(); 
    int hour = calendar.get(Calendar.HOUR_OF_DAY); 
    int minute = calendar.get(Calendar.MINUTE); 
    scratchpad s = new scratchpad(); 
    HourMinute now = s.new HourMinute(hour,minute); 
    System.out.println("Now is " + hour + ":" + minute); 
    int nearestTimeIndex = Collections.binarySearch(hourMinuteList, now); 
    if(nearestTimeIndex < 0){ 
     nearestTimeIndex = nearestTimeIndex * -1 -1; 
    } 
    System.out.println("Next time is " + ((HourMinute) hourMinuteList.get(nearestTimeIndex)).getHour() + ":" + ((HourMinute) hourMinuteList.get(nearestTimeIndex)).getMinuteString()); 
} 

private static HourMinuteList convertHMStringArrayToHMArray(String[] times){ 
    scratchpad s = new scratchpad(); 
    HourMinuteList list = s.new HourMinuteList(); 
    for(String time : times){ 
     String[] splitTime = time.split(":"); 
     int hour = Integer.parseInt(splitTime[0]); 
     int minute = Integer.parseInt(splitTime[1]); 
     HourMinute hm = s.new HourMinute(hour,minute); 
     list.add(hm); 
    } 
    return list; 
} 
class HourMinuteList extends ArrayList implements RandomAccess{ 

} 
class HourMinute implements Comparable { 
    int hour; 
    int minute; 

    public HourMinute(int hour, int minute) { 
     setHour(hour); 
     setMinute(minute); 
    } 

    int getMinute() { 
     return this.minute; 
    } 
    String getMinuteString(){ 
     if(this.minute < 10){ 
      return "0" + this.minute; 
     }else{ 
      return "" + this.minute; 
     } 
    } 

    int getHour() { 
     return this.hour; 
    } 

    void setHour(int hour) { 
     this.hour = hour; 
    } 

    void setMinute(int minute) { 
     this.minute = minute; 
    } 

    @Override 
    public int compareTo(Object aThat) { 

     if (aThat instanceof HourMinute) { 
      HourMinute that = (HourMinute) aThat; 
      if (this.getHour() == that.getHour()) { 
       if (this.getMinute() > that.getMinute()) { 
        return 1; 
       } else if (this.getMinute() < that.getMinute()) { 
        return -1; 
       } else { 
        return 0; 
       } 
      } else if (this.getHour() > that.getHour()) { 
       return 1; 
      } else if (this.getHour() < that.getHour()) { 
       return -1; 
      } else { 
       return 0; 
      } 
     } 

     return 0; 
    } 

} 

}

+0

感謝您的代碼。我絕對可以想出它,但你爲我節省了一些時間。我不得不做出一些改變,但你的建議是現貨。謝謝! – tgai 2010-04-24 15:22:20

1

你不能只是做它的其他方式?以小時和分鐘的形式從日曆中獲取當前時間,並將其轉換爲字符串,然後將這些時間與字符串進行比較。

如果你真的有很多數據,我希望你可以建立一個trie或類似的東西,並使用當前時間的完整字符串作爲查找哪個條目是第一個符合條件的關鍵字?