当前位置: 首页 > 知识库问答 >
问题:

我如何在Java8中迭代一年中的每个星期?

张德佑
2023-03-14

如果我在这里混淆了任何与ISO日期相关的术语,请提前道歉。

ZonedDateTime date = ZonedDateTime.now();
WeekFields weekFields = WeekFields.of(Locale.getDefault());
int weekNumber = date.get(weekFields.weekOfWeekBasedYear());

共有1个答案

公西承
2023-03-14

您可以构造一个日期,并将其调整为一年中第一周的第一天,方法如下:

int year = 2016;
WeekFields weekFields = WeekFields.ISO;
LocalDate date = LocalDate.now().with(weekFields.weekBasedYear(), year)
                                .with(weekFields.weekOfWeekBasedYear(), 1)
                                .with(ChronoField.DAY_OF_WEEK, 1);

由于JodaStephen的注释,另一种说法是使用isoFields类。

LocalDate date = LocalDate.now().with(IsoFields.WEEK_BASED_YEAR, year)
                                .with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, 1)
                                .with(ChronoField.DAY_OF_WEEK, 1);

WeekFields.ISO表示周的ISO定义:

>

  • weekbasedyear()表示基于周的年份字段:

    这代表了一年的概念,其中周从固定的一周中的一天开始,如星期一,每个周都正好属于一年。

    在这种情况下,我们希望将其设置为通缉年。

    然后,通过调用localdate.plusweeks(1),使用这样的日期,实际上可以遍历一年中的所有周。问题是:您需要迭代多少次?一年中可以有超过52周的时间。以周为基础的一年中有52周或53周。

    您可以通过以下方式检索周数。此调用rangerefinedby(date)以检索给定日期的年份周字段的有效值,并获取其最大值。

    long maxWeekOfYear = weekFields.weekOfWeekBasedYear().rangeRefinedBy(date).getMaximum();
    

  •  类似资料:
    • 我有一个文本字段列表,每个字段都有相同的类名。这是html代码: 每个文本字段都有相同的类名,我试图通过使用Selenium中的sendKeys方法向每个文本字段发送键来自动化这些字段。我使用JavaScript(chai,mocha,node)来运行我的自动化。 这就是我试过的。我尝试通过className使用findElements,遍历className,然后填充每个文本字段: 但它失败,出

    • 我想知道,如何在Java8中使用流API迭代多级列表 根据Java8,我应该做如下的操作 我想要流利地做这件事(使用内部迭代)。任何解释都会很感激。

    • 我有两份清单: 列表1: Object1(name1, id1) 列表2: Object2(name2, id2) 给定list1的大小与list2相同 我想迭代list2,如果list2的name2不为null,则更新list1的name1。 以下是使用旧java的代码: 用java实现这一点的最佳方法是什么。util。流动

    • 我正在寻找一种用Java8流模拟以下行为的方法。给定一个年份流,对它们进行排序,以便输出前10个值,这样,在输出一年之后,该值将减少,并且迭代重新开始再一次resorting: 如果我输入2005年、2020年、2000年、1967年和2018年,我期望以10为限得出以下结果: 我使用的测试是: 但看起来sorted()一点也不懒。整个排序在beggining处完成一次,因此在任何进一步操作之前要