如何在java中获得连续的周数和年数?

如何在java中获得连续的周数和年数?,java,week-number,Java,Week Number,我正在存储一些与周数相关的数据。现在,我有两个按钮来请求数据。一个是前一周的,另一个是下一周的。默认情况下会获取当前周的数据我刚刚完成了年终例外,我知道明年(2020年)也会有第53周。现在每过一周它都会休息。(它只是跳过了第53周)显然,一定有更好的方法来做到这一点。。 我只是不断添加异常,下面是我最终得到的代码。 我是个笨蛋,所以请容忍这种丑陋的逻辑 LocalDate wks, mon, tue, wed, thu, fri, sat, wke; try { week = Inte

我正在存储一些与周数相关的数据。现在,我有两个按钮来请求数据。一个是前一周的,另一个是下一周的。默认情况下会获取当前周的数据

我刚刚完成了年终例外,我知道明年(2020年)也会有第53周。现在每过一周它都会休息。(它只是跳过了第53周)

显然,一定有更好的方法来做到这一点。。 我只是不断添加异常,下面是我最终得到的代码。 我是个笨蛋,所以请容忍这种丑陋的逻辑

LocalDate wks, mon, tue, wed, thu, fri, sat, wke;
try {
    week = Integer.parseInt(request.getParameter("week"));
    year = Integer.parseInt(request.getParameter("year"));
} catch (NumberFormatException e) {
    week = getWeek();
    year = getCurrYear();
    flag = 1;
}
LocalDate date = LocalDate.now()
.withYear(year) // year
.with(WeekFields.ISO.weekOfWeekBasedYear(), week) // week of year
.with(WeekFields.ISO.dayOfWeek(), 7);
wks = date.plusDays(-7);
if ((date + "").substring(0, 4).equals((wks + "").substring(0, 4))) {
} else if (flag == 1) {
    year++;
}
date = LocalDate.now()
.withYear(year) // year
.with(WeekFields.ISO.weekOfWeekBasedYear(), week) // week of year
.with(WeekFields.ISO.dayOfWeek(), 7);
wks = date.plusDays(-7);
mon = wks.plusDays(1);
tue = wks.plusDays(2);
wed = wks.plusDays(3);
thu = wks.plusDays(4);
fri = wks.plusDays(5);
sat = wks.plusDays(6);
wke = date;
System.out.println(week + " " + year);
heading = "<div class='row'>"
        + "<form action=\"";
if (week == 1) {
    heading += "javascript:setContent('/getData?week=52&year=" + (year - 1) + "')\" >";
} else {
    heading += "javascript:setContent('getData?week=" + (week - 1) + "&year=" + (year) + "')\" >";
}
heading += "<button type='submit'>Previous</button></form><form action=\"";
if (week == 52) {
    heading += "javascript:setContent('getData?week=1&year=" + (year + 1) + "')\" >";
} else {
    heading += "javascript:setContent('getData?week=" + (week + 1) + "&year=" + (year) + "')\" >";
}
heading += "<button type='submit'Next</button></form>";
out.print(heading);
函数:getCurrYear(){

我必须打印一周中几天的日期,这就是为什么星期一到星期六是可变的。

我只想要一个如下的函数

java.time软件包会让您非常满意:

LocalDate.now().get(WeekFields.ISO.weekOfWeekBasedYear())
这将返回一年中的一周(现在执行返回52),但整个包包含您需要的所有内容,您只需探索即可。

tl;dr 细节 永远不要使用这两个
Date
类中的任何一个。它们很糟糕,现在是遗留的。它们在几年前被JSR 310中定义的现代java.time类所取代

答案是正确的

YearWeek
此外,如果您对周的定义是标准ISO 8601定义(周从星期一开始,第1周包含日历年的第一个星期四),则将该库添加到您的项目中。该库具有扩展java.time功能的类。特别是,您可以获得该类

获取当前周。这需要一个时区。对于任何给定的时刻,全球各地的日期因时区而异

ZoneId z = ZoneId.of( "Africa/Tunis" );
YearWeek currentWeek = YearWeek.now( z ) ;
要获得前一周或下一周,只需调用加号或减号方法

YearWeek priorWeek = currentWeek.minusWeeks( 1 ) ;
YearWeek followingWeek = currentWeek.plusWeeks( 1 ) ;
如果您想要一周中的日期,请调用
atDay
并从
DayOfWeek
enum传递一周中的一天

LocalDate localDate = priorWeek.atDay( DayOfWeek.MONDAY ) ;
您可以查询周数和年数(即基于周的年份)

YearWeek
.now( 
    ZoneId.of( "Asia/Tokyo" ) 
)
.minusWeeks( 1 ) 
.getWeek()         // Returns an `int` in range of 1-52 or 1-53, the week number within a year. 
ZoneId z = ZoneId.of( "Africa/Tunis" );
YearWeek currentWeek = YearWeek.now( z ) ;
YearWeek priorWeek = currentWeek.minusWeeks( 1 ) ;
YearWeek followingWeek = currentWeek.plusWeeks( 1 ) ;
LocalDate localDate = priorWeek.atDay( DayOfWeek.MONDAY ) ;
int weekNumber = priorWeek.getWeek() ;
int weekBasedYearNumber = priorWeek.getYear() ;