2013-07-25 3 views
1

Предположим, у меня есть Collection из DateTimes, как я могу отфильтровать все объекты DateTime, которые имеют время между 10ч00 и 12h30m?Как извлечь joda DateTime, принадлежащую определенному временному диапазону?

Например:

new DateTime(2013,1,1,10,0) - это право,

new DateTime(2013,1,1,16,0) - нет.

Параметры, такие как месяц, год, день, не имеют значения. Любые идеи?

ответ

3

Вы действительно можете воспользоваться LocalTime класса Joda здесь:

LocalTime lowerBound = new LocalTime(10, 0); 
LocalTime upperBound = new LocalTime(12, 30); 

List<DateTime> filtered = new ArrayList<>(); 

for (DateTime dateTime : originals) { 
    LocalTime localTime = new LocalTime(dateTime); 
    if (lowerBound.isBefore(localTime) && upperBound.isAfter(localTime)) { 
     filtered.add(dateTime); 
    } 
} 

Вам может потребоваться настроить для инклюзивного и эксклюзивного, но LocalTime является Comparable, и, кроме того, имеет дружественные методы сравнения, которые помогают читабельности.

+0

Я бы сравнил, если время после/перед границами. Он читает намного лучше ИМО. –

+1

@Vixen В идеале у вас будет общий класс Range, который работает со Comparables и имеет метод contains(), но точкой ответа является использование LocalTime – bowmore

1
List<DateTime> filtered = new ArrayList<>();  
for (DateTime dt : mycollection){ 
    if (dt.getHourOfDay >= 10 && dt.getHourOfDay <= 12){ 
     if (dt.getHourOfDay != 12 || 
      (dt.getHourOfDay == 12 && dt.getMinuteOfHour <= 30)){ 
       filtered.add(dt); 
     } 
    } 
} 
0

Для простоты я использовал Calendar тип класса.

Это должно решить вашу просьбу:

public List<Calendar> filterDateTime(ArrayList<Calendar> dateTimeList) { 
     List<Calendar> dateTimeFilteredList = new ArrayList<Calendar>(); 

     for (int i=0;i < dateTimeList.size(); i++) { 
      Calendar currentDateTime = Calendar.getInstance(); 
      currentDateTime.setTime(dateTimeList.get(i).getTime()); 

      // Setting the bottom dateTime value 
      Calendar filterFrom = Calendar.getInstance(); 
      filterFrom.setTime(currentDateTime.getTime()); 
      filterFrom.set(Calendar.HOUR_OF_DAY, 10); 
      filterFrom.set(Calendar.MINUTE, 00); 

      // Setting the upper dateTime value 
      Calendar filterTo = Calendar.getInstance(); 
      filterTo.setTime(currentDateTime.getTime()); 
      filterTo.set(Calendar.HOUR_OF_DAY, 12); 
      filterTo.set(Calendar.MINUTE, 30); 

      if(currentDateTime.after(filterFrom) && currentDateTime.before(filterTo)) { 
       dateTimeList.add(currentDateTime); 
      } 
     } 
     return dateTimeFilteredList; 
    } 
Смежные вопросы