gpt4 book ai didi

Java 8 LocalDate : Determine What Monday of the Month its (1st, 第二、第三等)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:38 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何确定特定星期一是给定月份的第一个、第二个、第三个或第四个星期一。我已经弄清楚如何使用 LocalDate 类来获取下周一和本月的星期几。

LocalDate now = LocalDate.of(2018, 2, 1);
LocalDate nextMonday = now.with(next(DayOfWeek.MONDAY));
WeekFields weekFields = WeekFields.of(Locale.getDefault());
int week = nextMonday.get(weekFields.weekOfMonth());

在上面的例子中,代码获取下一个星期一和它所在的星期。星期是二月的第二周,但那个星期一不是第二个星期一,而是第一个星期一。如有任何帮助,我们将不胜感激。

最佳答案

你不应该为此使用自己的算法。使用内置功能:

    int week = nextMonday.get(ChronoField.ALIGNED_WEEK_OF_MONTH);

根据您代码中的日期,这会产生:

1

这意味着您得到的星期一(2 月 5 日)是该月的第一个星期一。此外,您不需要任何 WeekFields,因为无论哪一天是一周的第一天,或者一年中的几周是如何编号的,每个月的第一个星期一都是该月的第一个星期一。

日期运算通常很复杂且容易出错。这也意味着即使你最终得到了正确的计算,读者也很难说服自己你的代码是正确的。因此,最好使用我们相信可以测试的内置功能,它使用解释性名称而不是像 1 和 7 这样的数字。

您可能会惊讶于要使用的字段名为 ALIGNED_WEEK_OF_MONTH。将对齐的周视为从每月 1 号开始的一周,无论星期几,以及接下来的几周。 2018 年 2 月,第一个对齐周从 2 月 1 日星期四到 2 月 7 日星期三。接下来的对齐周从 2 月 8 日、2 月 15 日和 2 月 22 日星期四开始。显然,该月的第一个星期一属于对齐周 1,对齐第 2 周的第 2 个星期一,依此类推。因此它可以使用 ALIGNED_WEEK_OF_MONTH

关于Java 8 LocalDate : Determine What Monday of the Month its (1st, 第二、第三等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com