7

可以用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()

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

4

4 回答 4

10

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

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 - 5 Sep”之类的信息。

于 2012-08-08T13:19:47.147 回答
1

修复一些变量:

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);
于 2013-03-14T18:40:08.960 回答
1

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

 public List<Pair<LocalDate, LocalDate>> getWeeksInMonth(LocalDate data) {

        int firstWeekInMonth = data.withDayOfMonth(1).getWeekOfWeekyear();
        int lastWeekInMonth = data.dayOfMonth().withMaximumValue().getWeekOfWeekyear();

        List<Pair<LocalDate, LocalDate>> 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, V2>{

        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;
        }
    }
于 2015-06-10T02:26:45.853 回答
0

我认为这也是每周寻找的工作

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() +""};
于 2015-12-01T14:01:44.163 回答