假设我有一个Collection
DateTimes
,我如何过滤所有时间在10hm到12h30m之间的DateTime
个对象?
例如:
new DateTime(2013,1,1,10,0)
- 是对的,
new DateTime(2013,1,1,16,0)
- 不是。
月,年,日等参数不重要。 有什么想法吗?
答案 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);
}
}
您可能需要针对包含性或排他性进行调整,但LocalTime
为Comparable
,并且最重要的是,它具有友好的比较方法,有助于提高可读性。
答案 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;
}