我正在存储一些以周号为参考的数据。现在,我有两个按钮来请求数据。一个是上周的,另一个是下周的。默认情况下会获取当前周的数据
我刚刚结束了年末的例外情况,因为我得知明年还有第53周( 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);
功能:getWeek()
public static int getWeek() {
java.util.Date date = new java.util.Date();
SimpleDateFormat ft = new SimpleDateFormat("w");
return (Integer.parseInt(ft.format(date)));
}
function:getCurrYear(){
public static int getCurrYear() {
Date date = new Date();
return (date.getYear() + 1900);
}
我必须打印星期几的日期,这就是为什么星期一到星期六的变量。
我只想要下面的功能
function int[] getWeekYear(){
return [prev week,prev week's year,current week,current year,next week,next week's year];
}
答案 0 :(得分:1)
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.
从不使用两个Date
类中的任何一个。它们很可怕,现在已成为历史。几年前,JSR 310中定义的现代 java.time 类取代了它们。
Answer by Renato是正确的。
YearWeek
此外,如果您对一周的定义是标准的ISO 8601定义(周从星期一开始,则第1周包含日历年的第一个星期四),然后将ThreeTen-Extra库添加到您的项目中。该库具有扩展 java.time 功能的类。特别是,您获得了YearWeek
类。
获取当前星期。这需要一个时区。在任何给定的时刻,日期都会随时区在全球范围内变化。
ZoneId z = ZoneId.of( "Africa/Tunis" );
YearWeek currentWeek = YearWeek.now( z ) ;
要获取上一周或下一周的信息,只需调用加号或减号方法。
YearWeek priorWeek = currentWeek.minusWeeks( 1 ) ;
YearWeek followingWeek = currentWeek.plusWeeks( 1 ) ;
如果您要从一周开始约会,请致电atDay
,并从DayOfWeek
枚举中传递星期几。
LocalDate localDate = priorWeek.atDay( DayOfWeek.MONDAY ) ;
您可以询问星期的数字及其年份(即以周为基础的年份)。
int weekNumber = priorWeek.getWeek() ;
int weekBasedYearNumber = priorWeek.getYear() ;
答案 1 :(得分:0)
java.time 软件包将使您非常满意:
LocalDate.now().get(WeekFields.ISO.weekOfWeekBasedYear())
这将返回一年中的星期(执行后现在返回52),但是整个程序包包含您需要的所有内容,您只需进行探索即可。