0

我有一个List<Object[]>包含两个日期的值,我有“filterFromDayStart”,filterToDayEnd例如以下日期 20.06.17 00:00:0020.06.17 23:59:59

现在我想剪切row[15]或者row[16]是否与filterFromDayStartand重叠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];

        }

    }
4

1 回答 1

0

您只是在比较row[0]with filterFrom,但在第三种情况下,您还必须检查 if row[1]is before 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]不是 before filterFrom,那么你应用你的规则。否则,无需更改。

这将产生您想要的输出。

于 2017-07-04T21:00:11.090 回答