2013-07-25 33 views
1

假設我有一個CollectionDateTimes,我如何過濾所有DateTime時間在10h00m到12h30m之間的對象?如何提取屬於特定時間範圍的joda DateTime?

例如:

new DateTime(2013,1,1,10,0) - 是正確的,

new DateTime(2013,1,1,16,0) - 不是。

參數如月,年,日不重要。 任何想法?

回答

3

你真的可以利用喬達的LocalTime類的位置:

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); 
    } 
} 

您可能需要調整爲包括或不包括,但LocalTimeComparable,最重要的是,它具有友好的比較方法,有助於可讀性。

+0

如果時間在界限之後,我會進行比較。它讀得更好IMO。 –

+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; 
    } 
相關問題