假設我有一個Collection
的DateTimes
,我如何過濾所有DateTime
時間在10h00m到12h30m之間的對象?如何提取屬於特定時間範圍的joda DateTime?
例如:
new DateTime(2013,1,1,10,0)
- 是正確的,
new DateTime(2013,1,1,16,0)
- 不是。
參數如月,年,日不重要。 任何想法?
假設我有一個Collection
的DateTimes
,我如何過濾所有DateTime
時間在10h00m到12h30m之間的對象?如何提取屬於特定時間範圍的joda DateTime?
例如:
new DateTime(2013,1,1,10,0)
- 是正確的,
new DateTime(2013,1,1,16,0)
- 不是。
參數如月,年,日不重要。 任何想法?
你真的可以利用喬達的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
,最重要的是,它具有友好的比較方法,有助於可讀性。
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);
}
}
}
爲了簡單起見,我使用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;
}
如果時間在界限之後,我會進行比較。它讀得更好IMO。 –
@Vixen理想情況下,你會有一個通用的Range類,它與Comparables一起工作,並且有一個contains()方法,但答案的要點是使用LocalTime – bowmore