2010-04-22 65 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或类似的东西,并使用当前时间的完整字符串作为查找哪个条目是第一个符合条件的关键字?