我有周数,它对应的年份和 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);
Run Code Online (Sandbox Code Playgroud)
但是后来意识到 wkstart 正在存储当前日期而不是一周的开始。
有没有更好的方法来做到这一点?
Swe*_*per 10
而不是添加天数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
Run Code Online (Sandbox Code Playgroud)
LocalDate localDate =
YearWeek // Represent an entire week of a week-based year per the ISO 8601 standard definition of a week.
.of( // Instantiate a `YearWeek` object.
2019 , // Specify the week-based year number, NOT the calendar year.
51 // Specify the week number, 1-52 or 1-53.
)
.atDay(
DayOfWeek.of( 1 ) // The value 1 yields a `DayOfWeek.MONDAY` object.
)
;
Run Code Online (Sandbox Code Playgroud)
org.threeten.extra.YearWeekSweeper的答案看起来是正确的。但是有一个更专业的课程。
如果这样做与每个基于为期一周的年周多的工作周的ISO 8601的定义,使用YearWeek中发现了类ThreeTen-EXTRA库。该库为 Java 8 及更高版本中内置的java.time类添加了额外的功能。
确定星期。
YearWeek yearWeek = YearWeek.of( 2019 , 51 ) ;
Run Code Online (Sandbox Code Playgroud)
LocalDate在该周内获取一周中的某天。
LocalDate localDate = yearWeek.atDay( DayOfWeek.MONDAY ) ;
Run Code Online (Sandbox Code Playgroud)
对于星期几,您应该DayOfWeek在代码中使用枚举对象,而不仅仅是整数。要从DayOfWeek周一至周日的原始号码 1-7 获取 ,请致电DayOfWeek.of( x )。
DayOfWeek dow = DayOfWeek.of( 1 ) ; // 1 = Monday, 7 = Sunday.
Run Code Online (Sandbox Code Playgroud)
把所有这些放在一起,我们得到了这个单线。
LocalDate localDate = YearWeek.of( 2019 , 51 ).atDay( DayOfWeek.of( 1 ) ) ;
Run Code Online (Sandbox Code Playgroud)
需要明确的是…… ISO 8601 对一周的定义是: