在jodatime中计算一个月的周数

有可能在jodatime中计算一个月的周数吗?

我需要这样的东西:

月:七月

  • 27周的一周; 1-7。 七月
  • 28周; 9-14。 七月
  • 29周; 16-21。 七月
  • 30年周; 23-31。 七月

月:八月

  • 31年周; 1-4。 八月
  • 32年周; 6-11。 八月
  • 33年周; 13-18。 八月
  • 34年周; 20-25。 八月
  • 35年周; 27-31。 八月

我知道我可以像这样在joda时间获得一周的一周:

new LocalDate().weekOfWeekYear()

但我不知道如何获得相关日期。

要检索一周的范围,只需创建一个指向一周的第一天和最后一天的对象,然后从中拉出一天中的某一天。

 int weekOfYear = 32; LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1); LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(7); System.out.println("Week of Year "+weekOfYear+"; "+firstDay.toString("d MMM")+" - "+lastDay.toString("d MMM")); 

您也可以像这样提取日期:

 int weekStart = firstDay.getDayOfMonth(); int weekEnd = lastDay.getDayOfMonth(); 

然后,您可以使用相同的技术检索一个月内的周数。

 int firstWeekInMonth = new LocalDate().withMonthOfYear(month).withDayOfMonth(1).getWeekOfYear(); int lastWeekInMonth = new LocalDate().withMonthOfYear(month).dayOfMonth().withMaximalValue().getWeekOfYear(); 

可能你可能想限制开始日期和结束日期保持在月份范围内,否则你可能会得到像’30 – 9 Sep’这样的东西。

修复一些变量:

 int weekOfYear = 32; LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1); LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(6); int weekStart = firstDay.getDayOfMonth(); int weekEnd = lastDay.getDayOfMonth(); System.out.println("Week of Year "+weekOfYear+"; "+weekStart+"-"+weekEnd+" "+month); 

我的解决方案,考虑其他答案

  public List> getWeeksInMonth(LocalDate data) { int firstWeekInMonth = data.withDayOfMonth(1).getWeekOfWeekyear(); int lastWeekInMonth = data.dayOfMonth().withMaximumValue().getWeekOfWeekyear(); List> weeks = new cicero.minhasfinancas.util.array.ArrayList<>(); while (firstWeekInMonth <= lastWeekInMonth) { LocalDate firstDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(1); LocalDate lastDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(7); weeks.add(new Pair<>(firstDay, lastDay)); firstWeekInMonth++; } return weeks; } public class Pair{ V1 first; V2 second; public Pair(V1 first, V2 second) { this.first = first; this.second = second; } public V1 getFirst() { return first; } public void setFirst(V1 first) { this.first = first; } public V2 getSecond() { return second; } public void setSecond(V2 second) { this.second = second; } } 

我认为这也是每周都能找到的工作

 String[] weekDays = {today.withDayOfWeek(DateTimeConstants.MONDAY).getDayOfMonth() +"", today.withDayOfWeek(DateTimeConstants.TUESDAY).getDayOfMonth()+ "", today.withDayOfWeek(DateTimeConstants.WEDNESDAY).getDayOfMonth() + "", today.withDayOfWeek(DateTimeConstants.THURSDAY).getDayOfMonth() + "", today.withDayOfWeek(DateTimeConstants.FRIDAY).getDayOfMonth() +"", today.withDayOfWeek(DateTimeConstants.SATURDAY).getDayOfMonth() +"", today.withDayOfWeek(DateTimeConstants.SUNDAY).getDayOfMonth() +""};