【发布时间】:2020-05-13 02:34:39
【问题描述】:
我正在做一个项目。在那里我应该找到一年中的总周数。我尝试使用以下代码,但得到错误答案:2020 年有 53 周,但此代码给出了 52 周。
这段代码哪里出错了?
package com.hib.mapping;
import java.time.LocalDate;
import java.time.temporal.WeekFields;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.joda.time.DateTime;
public class TestWeek {
public static void main(String args[]) {
System.out.println(getWeeks());
}
public static int getWeeks() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2020);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
GregorianCalendar gregorianCalendar = new GregorianCalendar();
int weekDay = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (gregorianCalendar.isLeapYear(2020)) {
if (weekDay == Calendar.THURSDAY || weekDay == Calendar.WEDNESDAY)
return 53;
else
return 52;
} else {
if (weekDay == Calendar.THURSDAY)
return 53;
else
return 52;
}
}
}
输出:
52
【问题讨论】:
-
不完全重复,但建议阅读:stackoverflow.com/questions/44197872/…
-
建议提供一周的定义。
-
现在是 2020 年。请避免在
Date和Calendar周围使用麻烦的旧旧日期 api。改用java.time,更好更简单。 -
如果(年份是闰年)并且(1 月 1 日是星期日)则为 54,否则为 53。
-
你能给我一些代码吗?
标签: java date java-8 week-number