gpt4 book ai didi

java - 如何在java日历中设置一年的第一个月

转载 作者:行者123 更新时间:2023-11-30 01:54:28 25 4
gpt4 key购买 nike

我的要求是我想通过日期获取一年中的周数。

规则:

一年中的第一个月应该是二月。一周应该从周六到周五开始。

例如:

02/01/2019 - should return week number as 1
02/02/2019 - should return week number as 2

最佳答案

我需要进行一些论证才能得出正确的解决方案:如果我理解正确的话,二月的第一个星期五总是在第一周。第一周从 6 天前开始。如果我们想象“第 0 周”再提前 7 天开始,那么一天的周数将始终是自该“第 0 周”开始(2 月第一个星期五之前 13 天)以来的整周数。我们可以计算一下。

public static int getWeekNumber(LocalDate date) {
int year = date.getYear();
if (date.getMonth().equals(Month.JANUARY)) {
// calculate from February in previous year
year--;
}

LocalDate imaginaryWeek0Start = LocalDate.of(year, Month.FEBRUARY, 1)
.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY))
.minusDays(13);

long weekNo = ChronoUnit.WEEKS.between(imaginaryWeek0Start, date);

return Math.toIntExact(weekNo);
}

让我们尝试一下您问题中的两个示例日期:

    System.out.println(getWeekNumber(LocalDate.of(2019, Month.FEBRUARY, 1)));
System.out.println(getWeekNumber(LocalDate.of(2019, Month.FEBRUARY, 2)));

这打印:

1
2

如果您打算使用 Calendar 类,我故意不这样做。该类设计不佳且早已过时。相反,我推荐 LocalDate 以及 java.time(现代 Java 日期和时间 API)中的其他类。

链接: Oracle tutorial: Date Time解释如何使用 java.time。

关于java - 如何在java日历中设置一年的第一个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54948778/

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