我有一个List<Object[]>
有两个日期值,我有&#39; filterFromDayStart&#39;和filterToDayEnd
,例如以下日期20.06.17 00:00:00
和20.06.17 23:59:59
现在,如果与row[15]
和row[16]
重叠,我想剪切filterFromDayStart
或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
切换到 - &gt;
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
切换到 - &gt;
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];
}
}
答案 0 :(得分:0)
您只是将row[0]
与filterFrom
进行比较,但在第三种情况下,您还必须检查row[1]
是否在filterFrom
之前。只需将for
循环更改为:
for (Object[] row : list) {
Date row0 = (Date) row[0];
Date row1 = (Date) row[1];
if (!row1.before(filterFrom)) {
row[0] = row0.before(filterFrom) ? filterFrom : row[0];
row[1] = row1.after(filterTo) ? filterTo : row[1];
}
}
如果row[1]
不在filterFrom
之前,则您应用规则。否则,不需要改变。
这将产生您想要的输出。