gpt4 book ai didi

java - Calendar.getWeeksI Week Year 返回同一年但在不同系统中的不同值

转载 作者:行者123 更新时间:2023-12-02 09:24:27 25 4
gpt4 key购买 nike

我正在使用这种方法来获取一年中弱者的数量,但在我的计算机中,2020 年它返回 53,但在服务器中它返回 52!我不知道为什么?

Integer getNumberOfWeeksInYear(@PathParam("year") int year) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);

return calendar.getWeeksInWeekYear();
}

最佳答案

两个答案 - 52 周和 53 周 - 都是正确的。也就是说,在不同的区域设置中。

2020 年是闰年,从周三开始,周四结束。不同的地区以不同的方式计算周数。例如:

  • 在突尼斯(ar-TN 语言环境),周从星期六开始,一年中的第一周是包含 1 月 1 日的那一周。因此,第 1 周是从 2019 年 12 月 28 日星期六到 2020 年 1 月 4 日星期五。第 52 周是从12 月 21 日至 27 日。 12 月 28 日开始的一周被视为 2021 年的第一周。因此 2020 年有 52 周。
  • 在 ISO 日历系统(国际标准)中,周从星期一开始,第一周是包含新年至少 4 天的第一周。因此,第 1 周是从 2019 年 12 月 30 日星期一到 1 月 5 日星期日。第 53 周是从 12 月 28 日到 2021 年 1 月 3 日星期日。所以有 53 周。

还有几点需要注意:

  • 您使用的 Calendar 类设计不佳且早已过时。
  • 您的代码在一些特殊情况下将无法正常工作。
    • Calendar.getInstance 为您提供基于默认语言环境的 Calendar 的具体子类的实例。它不能保证为您提供完全支持 getWeeksInWeekYear()Calendar,因此您的代码可能会崩溃。
    • 如果您在新年附近的某一天运行代码,属于上一年或下一年的一周,您将获得上一年或下一年的周计数,而不是您查询的年份。

获取一周中周数的正确而现代的方法是:

    WeekFields wf = WeekFields.of(Locale.forLanguageTag("ar-TN"));
int weekYear = 2020;
// The number of weeks is the same as the week number of the last week in the week year.
// So find a date in that last week and query its week number.
// The way to find a date in the last week is:
// find a date in week 1 of the following year and subtract 1 week.
LocalDate aDateInWeek1OfTheFollowingYear = LocalDate.of(weekYear + 1, Month.FEBRUARY, 1)
.with(wf.weekOfYear(), 1);
LocalDate aDateInLastWeek = aDateInWeek1OfTheFollowingYear.minusWeeks(1);
int lastWeekNumber = aDateInLastWeek.get(wf.weekOfYear());

System.out.format("Week year %d has %d weeks.%n", weekYear, lastWeekNumber);

此代码段的输出是:

Week year 2020 has 52 weeks.

关于java - Calendar.getWeeksI Week Year 返回同一年但在不同系统中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58439403/

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