如何从周数,年和dayOfWeek在Java中获取日期?

时间:2019-12-18 04:43:45

标签: java date

我有星期号,其对应的年份和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正在存储当前日期,而不是一周的开始。
有更好的方法吗?

2 个答案:

答案 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定义是:

  • 第1周包含一年中的第一个星期四。
  • 每周从星期一开始,在星期日结束。
  • 一年中有52个或53个完整的7天工作周。
  • 基于一周的年份的前/后几周可能包含上一个/下一个日历年的前/后几天。因此,这些日子的日历年与基于星期的年份不同。