如何提取属于特定时间范围的joda DateTime?

时间:2013-07-25 12:40:01

标签: java jodatime

假设我有一个Collection DateTimes,我如何过滤所有时间在10hm到12h30m之间的DateTime个对象?

例如:

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

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

月,年,日等参数不重要。 有什么想法吗?

3 个答案:

答案 0 :(得分:3)

你可以在这里充分利用joda的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,并且最重要的是,它具有友好的比较方法,有助于提高可读性。

答案 1 :(得分: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);
        }
    }
}

答案 2 :(得分: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;
  }