2010-04-22 2 views
2

나는 hh : mm 포맷으로 많은 시간 정보를 가지고 있으며,이 정보를 가지고 현재 시간과 비교하는 좋은 방법이 있는지 궁금해하고 있습니다. 하루의 시간 목록을 가지고 있다고 가정 해 봅시다.이 문자열 배열에서 어느 날이 이미 오늘 통과되지 않은 첫 번째 시간인지 알아야한다고 가정 해보십시오.안드로이드 플랫폼에서 시간 사용하기

캘린더 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를 만듭니다. 시간 : 분 객체에 Comparator를 구현합니다. 이 목록에 배열을 넣어 처리하고 정렬합니다.

정상적인 방법으로 현재 시간부터 시간과 분을 가져옵니다.

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

1

을 할 수 있을까? 달력에서 현재 시간을시, 분 단위로 가져 와서 문자열로 변환 한 다음 문자열과 비교합니다.

실제로 많은 데이터가있는 경우 trie 또는 비슷한 것을 작성하고 현재 시간의 전체 문자열을 기준으로 어떤 항목을 검색하기위한 키로 사용 하시길 원하십니까?

관련 문제