我有星期号,其对应的年份和dayOfWeek号(即1代表星期一,2代表星期二,依此类推)。有没有办法用Java中的此信息查找日期?
以下是我在网上找到的一种方法。
int week = 51;
LocalDate wkstart = LocalDate.now().with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, week);
LocalDate mon = wks.plusDays(1);
LocalDate tue = wks.plusDays(2);
LocalDate wed = wks.plusDays(3);
LocalDate thu = wks.plusDays(4);
LocalDate fri = wks.plusDays(5);
LocalDate sat = wks.plusDays(6);
LocalDate wkend = wks.plusDays(7);
但是后来意识到wkstart正在存储当前日期,而不是一周的开始。
有更好的方法吗?
答案 0 :(得分:6)
代替在wkstart
上添加几天的时间,而是再次使用with
来设置星期几。例如:
LocalDate date = LocalDate.now()
.with(WeekFields.ISO.weekBasedYear(), 2018) // year
.with(WeekFields.ISO.weekOfWeekBasedYear(), 51) // week of year
.with(WeekFields.ISO.dayOfWeek(), DayOfWeek.MONDAY.getValue()); // day of week
答案 1 :(得分:2)
tabledata
Answer by Sweeper看起来正确。但是有一个更专门的课程。
如果每个ISO 8601 definition of week都需要花费数周的时间来进行工作,请使用YearWeek
库中的ThreeTen-Extra类。
确定星期。
org.threeten.extra.YearWeek
在该周的星期几获得YearWeek yearWeek = YearWeek.of( 2019 , 51 ) ;
。
LocalDate
对于一周中的某天,您应该在代码中使用DayOfWeek
枚举对象,而不仅仅是整数。要从周一至周日的原始号码1-7获取LocalDate localDate = yearWeek.atDay( DayOfWeek.MONDAY ) ;
,请致电DayOfWeek
。
DayOfWeek.of( x )
总的来说,我们得到了这种一线。
DayOfWeek dow = DayOfWeek.of( 1 ) ; // 1 = Monday, 7 = Sunday.
要清楚……一个星期的ISO 8601定义是: