我如何计算给定日期列表中几周的日期

时间:2017-12-04 06:54:49

标签: java algorithm date

我想查找给定日期列表中第1周,第2周,第3周和第4周的日期数

[2017-11-22 21:41:39.0, 2017-11-27 23:15:26.0, 2017-11-27 23:26:23.0,
 2017-11-28 19:50:18.0, 2017-11-29 16:14:33.0] are dates

//By Using map  
Map<Integer, List<Date>> map;
map = inboxOutboxentityList.stream()
    .collect(Collectors.groupingBy(element -> 
         element.getDate().get(weekFields.weekOfWeekBasedYear())
    )
);

1 个答案:

答案 0 :(得分:1)

如果可以的话,只要忘记过时的Date课程,并用纯java.time解决问题。你的代码离工作不远了。

    List<LocalDateTime> entities = Arrays.asList(
            LocalDateTime.of(2017, Month.NOVEMBER, 22, 21, 41, 39),
            LocalDateTime.of(2017, Month.NOVEMBER, 27, 23, 15, 26),
            LocalDateTime.of(2017, Month.NOVEMBER, 27, 23, 26, 23),
            LocalDateTime.of(2017, Month.NOVEMBER, 28, 19, 50, 18),
            LocalDateTime.of(2017, Month.NOVEMBER, 29, 16, 14, 33));
    Map<Integer, Long> countPerWeek = entities.stream()
            .collect(Collectors.groupingBy(
                    ldt -> ldt.get(WeekFields.ISO.weekOfWeekBasedYear()),
                    Collectors.counting()));
    System.out.println(countPerWeek);

打印:

{48=4, 47=1}

因此,第47周为4,第48周为4.我相信这就是你想要的。如果需要,请替换其他WeekFields对象。

如果要获取Date个对象的列表,则需要先将它们转换为现代类。关于如何做到这一点有很多问题和答案,快乐的搜索。正如您可能已经意识到的那样,您可以在同一系列的流操作中完成它。