我有一个List<Object[]>
包含两个日期的值,我有“filterFromDayStart”,filterToDayEnd
例如以下日期 20.06.17 00:00:00
和20.06.17 23:59:59
现在我想剪切row[15]
或者row[16]
是否与filterFromDayStart
and重叠filterToDayEnd
;如果没有重叠,因为该区域之外的日期/日期不削减日期。
filterToDayEnd: 20.06.17 00:00:00
filterToDayEnd:20.06.17 23:59:59
date_1_start : 19.06.17 22:00:00
date_1_end:20.06.17 02:00:00
切到 -->
date_1_start : 20.06.17 00:00:00
date_1_end:20.06.17 02:00:00
date_2_start : 19.06.17 22:00:00
date_2_end:19.06.17 22:00:00
不要切到!
date_3_start : 20.06.17 22:00:00
date_3_end:21.06.17 02:00:00
切到 -->
date_1_start : 20.06.17 22:00:00
date_1_end:20.06.17 23:59:59
除了其他情况...
我已经厌倦了下面的代码,但有时即使没有重叠,日期也会被削减。我该如何管理?
row[15] = row[15].before(filterFromDayStart) ? filterFromDayStart : row[15];
row[16] = row[16].after(filterToDayEnd) ? filterToDayEnd : row[16];
编辑 这是我的例子:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
public class DateBeforeAfter {
public static void main(String[] args) {
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date filterFrom = dateFormat.parse("2017-02-20 00:00:00.0");
Date filterTo = dateFormat.parse("2017-02-20 23:59:59.0");
Date date1 = dateFormat.parse("2017-02-20 16:10:00.0");
Date date2 = dateFormat.parse("2017-02-21 16:50:00.0");
Date date3 = dateFormat.parse("2017-02-19 19:42:00.0");
Date date4 = dateFormat.parse("2017-02-20 19:46:00.0");
Date date5 = dateFormat.parse("2017-02-19 19:42:00.0");
Date date6 = dateFormat.parse("2017-02-19 19:46:00.0");
ArrayList<Object[]> list = new ArrayList<Object[]>();
Object[] element1 = { date1, date2 };
list.add(element1);
Object[] element2 = { date3, date4 };
list.add(element2);
Object[] element3 = { date5, date6 };
list.add(element3);
for (Object[] row : list) {
row[0] = ((Date) row[0]).before(filterFrom) ? filterFrom : row[0];
row[1] = ((Date) row[1]).after(filterTo) ? filterTo : row[1];
}
for (Object[] row : list) {
System.out.println(Arrays.toString(row));
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
结果
[Mon Feb 20 16:10:00 CET 2017, Mon Feb 20 23:59:59 CET 2017]
[Mon Feb 20 00:00:00 CET 2017, Mon Feb 20 19:46:00 CET 2017]
[Mon Feb 20 00:00:00 CET 2017, Sun Feb 19 19:46:00 CET 2017]
我怎样才能以正确的方式制作它,以免第三个被剪掉?
正确的结果是:
[Mon Feb 20 16:10:00 CET 2017, Mon Feb 20 23:59:59 CET 2017]
[Mon Feb 20 00:00:00 CET 2017, Mon Feb 20 19:46:00 CET 2017]
[Sun Feb 19 19:42:00 CET 2017, Sun Feb 19 19:46:00 CET 2017]
这部分代码对我有用:
for (Object[] row : list) {
if ((((Date) row[0]).before(filterFrom) && ((Date) row[1]).before(filterFrom))) {
System.out.println("The record is before filterFrom: " + Arrays.toString(row));
} else if ((((Date) row[0]).after(filterTo) && ((Date) row[1]).after(filterTo))) {
System.out.println("The record is after filterFrom: " + Arrays.toString(row));
} else {
row[0] = ((Date) row[0]).before(filterFrom) ? filterFrom : row[0];
row[1] = ((Date) row[1]).after(filterTo) ? filterTo : row[1];
}
}