Java 在jodatime中计算一个月的周数

Java 在jodatime中计算一个月的周数,java,jodatime,Java,Jodatime,是否可以在jodatime中计算一个月的周数 我需要这样的东西: int weekStart = firstDay.getDayOfMonth(); int weekEnd = lastDay.getDayOfMonth(); 月份:7月 第27年的一周;1-7. 七月 第28年的一周;9-14. 七月 第29年的一周;16-21. 七月 第30年的一周;23-31. 七月 月份:8月 第31年的一周;1-4. 八月 第32年的一周;6-11. 八月 第33年的一周;13-18. 八月

是否可以在jodatime中计算一个月的周数

我需要这样的东西:

int weekStart = firstDay.getDayOfMonth();
int weekEnd = lastDay.getDayOfMonth();
月份:7月

  • 第27年的一周;1-7. 七月
  • 第28年的一周;9-14. 七月
  • 第29年的一周;16-21. 七月
  • 第30年的一周;23-31. 七月
月份:8月

  • 第31年的一周;1-4. 八月
  • 第32年的一周;6-11. 八月
  • 第33年的一周;13-18. 八月
  • 第34年的一周;20-25. 八月
  • 第35年的一周;27-31. 八月
我知道我可以在joda时间里得到一年中的一周,如下所示:

newlocaldate().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();
您可能希望将开始和结束日期限制在月份范围内,否则您可能会遇到“9月30日至5日”之类的情况。

修复一些变量:

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<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;
        }
    }
public List getWeeksInMonth(LocalDate数据){
int firstWeekInMonth=data.withDayOfMonth(1.getWeekOfWeekyear();
int lastWeekInMonth=data.dayOfMonth().withMaximumValue().GetWeeOfWeeKyear();
List weeks=new cicero.minhasfinancas.util.array.ArrayList();

而(第一周)每月我想这也是每周都要找的工作

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() +""};

这不仅没有回答这个问题(尽管它提供了很好的灵感),而且它包含两个错误:逻辑上认为周末是从最后一天派生的,这是未使用的,而不是第一天;而且,答案提到了变量“月”,这是未定义的。我试图修复这个明显的错误(但可能令人困惑)错误被脾气暴躁的评论者拒绝了。@Lambart你的确是对的。我修正了错误,并添加了一段,希望能更好地回答问题。不过,不要让编辑让你失望:)