I have a List<Object[]>
with two dates value and I have the 'filterFromDayStart' and filterToDayEnd
which presente for example the following date 20.06.17 00:00:00
and 20.06.17 23:59:59
Now I want to cut row[15]
or row[16]
if there is overlapping with filterFromDayStart
and filterToDayEnd
; if there is no overlapping because the date/dates outside the area do not cut the dates.
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
cut to -->
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
do not cut to!
date_3_start : 20.06.17 22:00:00
date_3_end: 21.06.17 02:00:00
cut to -->
date_1_start : 20.06.17 22:00:00
date_1_end: 20.06.17 23:59:59
besides other cases...
I have tired the code below but some times the date is being cut even if there is no overlapping. How can I manage that?
row[15] = row[15].before(filterFromDayStart) ? filterFromDayStart : row[15];
row[16] = row[16].after(filterToDayEnd) ? filterToDayEnd : row[16];
Edit Here is my example:
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();
}
}
}
result
[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]
How can I make it in the right way so that the third one is not being cut?
The right result would be:
[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]
This part of code works for me:
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];
}
}