java - 使用 LocalDate 获取过去的星期和年份

标签 java time java-8 week-number temporal

我使用 Java 8 时间库来确定从今天开始的前几周和前一年,然后将这些值存储在 map 中。我想我已经弄清楚如何正确获取周数,但我不完全确定获取年份的正确方法是什么。当前代码如下:

int weeksLimit = 5; // this value is passed into the method, but just setting it here as an example
Map<Integer, Integer> yearWeeks = new HashMap<Integer, Integer>();
LocalDate ld = LocalDate.now();
WeekFields weekFields = WeekFields.of(DayOfWeek.SUNDAY, 4);
for (int i = weeksLimit; i > 0; i--) {
    LocalDate pastDate = ld.minusWeeks(i);
    yearWeeks.put(pastDate.getYear(), pastDate.get(weekFields.weekOfWeekBasedYear()));
}

我不认为 pastDate.getYear() 是正确的用法。我想要的结果是:

  • 2020 年 1 月 12 日 - 2020 年 1 月 18 日 = 2020 年第 3 周
  • 2020 年 1 月 5 日 - 2020 年 1 月 11 日 = 2020 年第 2 周
  • 2019 年 12 月 29 日 - 2020 年 1 月 4 日 = 2020 年第 1 周
  • 2019 年 12 月 22 日 - 2019 年 12 月 28 日 = 2019 年第 52 周

有人可以帮我弄清楚如何正确获得我想要的年份吗?

最佳答案

我无法判断哪种数据结构适合您的目的。以年份为键、以周为值的 map 无法保存示例数据。在您的示例中,2020 年出现了三次,但给定的键只能在 map 中出现一次。在下面的示例中,我假设一个 map 将基于年份的每周映射到该年的周数列表

    WeekFields weekFields = WeekFields.of(Locale.forLanguageTag("mt_MT"));

    int weeksLimit = 5; // this value is passed into the method, but just setting it here as an example

    LocalDate today = LocalDate.now(ZoneId.of("Europe/Malta"));
    Map<Integer, List<Integer>> yearWeeks = IntStream.rangeClosed(1, weeksLimit)
            .mapToObj(i -> today.minusWeeks(i))
            .collect(Collectors.groupingBy(ld -> ld.get(weekFields.weekBasedYear()),
                    Collectors.mapping(ld -> ld.get(weekFields.weekOfWeekBasedYear()),
                            Collectors.toList())));

    System.out.println(yearWeeks);

当我刚才运行代码片段时,输出是:

{2019=[52, 51], 2020=[3, 2, 1]}

我并不期望能够实现这一目标,但在我更清楚地了解您的需求之前,我不会投入更多精力。

关于java - 使用 LocalDate 获取过去的星期和年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59866343/

相关文章:

java - spring+hibernate 设置不允许保存

android - 在 Android 中显示当前时间并更新它?

java - DrJava:无法使用 JDK8.0 运行代码

java - RxJava 访问项目下游

time - 在 9GB 语料库上通过 MALLET 进行主题建模需要多少时间

java - CompletableFuture 能否用于创建非阻塞 I/O 调用?

java - JSF 2、EL Expression、Weblogic 和 EJB 注入(inject)

java - 运行play framework项目时VM初始化出错

java - 如何获取当前 Activity 的直播流列表并按描述和位置过滤它们

java - DateTimeFormatter - 解析带有时区的字符串