【发布时间】:2019-12-24 22:34:55
【问题描述】:
我希望构建一个函数,该函数返回一个数组,其中包含一年中前几个月的所有周数,这些周数与某个特定月份的周数相同。
我使用星期一作为一周的第一天,我使用当月的第一个星期一作为本月的第一周。
输入:一年中的一周和一年。例如 27 日和 2019 年。7 月的第一周 (7)。
输出:月份周数数组。例如 [2, 6, 10, 14, 19, 23, 27]。
我的尝试:
private void getResult(int weekYear)
{
LocalDate date = LocalDate.now();
final int weekNumber = 27;
LocalDate newDate = date.with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, weekNumber);
int month = newDate.getMonthValue();;
int weekMonth = LocalDate.from(newDate).get(WeekFields.ISO.weekOfMonth());
System.out.println(newDate);
System.out.println(month);
System.out.println(weekMonth);
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= month; i++)
{
LocalDate tempDate = date.withYear(2019).withMonth(i).with(WeekFields.ISO.weekOfMonth(), weekMonth);
int tempYear = LocalDate.from(tempDate).get(WeekFields.ISO.weekOfWeekBasedYear());
list.add(tempYear);
}
list.forEach((e) -> System.out.print(e + " "));
}
int weekYear = 27;
getResult(weekYear);
我得到了什么:[1 6 10 14 18 23 27]。
我在寻找什么:我有两个问题:
- 第一个:得到的结果与预期的不同。我认为问题是由于我没有指定如何计算每月的第一周(每月的第一个星期一)。这样对吗?我该如何解决?
- 第二个:有什么更好的解决方案?
【问题讨论】:
-
我认为你应该分开你的问题。问题 #1 是关于 StackOverflow 的主题。问题 #2 在codereview.stackexchange.com 在你有一个有效的实现之后会更好。
-
@Freiheit 感谢您的关注。我会听从你的建议。
-
我觉得这个功能可以解决问题:firstIntMonth docs.oracle.com/javase/8/docs/api/java/time/temporal/…。切换到
LocalDate tempDate = date.withYear(2019).withMonth(i).with(WeekFields.ISO.weekOfMonth(), weekMonth).with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));返回正确的列表。 -
@lezan 没有。首先,我得到
2 6 10 14 14 23 27,注意14 出现了两次。其次,如果你的出发点恰好在一个月的第二周或第四周,firstInMonth显然不会给你。
标签: java date time dayofweek java-time