2012-08-08 60 views
7

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

我需要的是这样的:

:7月27年的

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

月:当年8月31

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

我知道,我可以得到新年的一周约达时间是这样的:

new LocalDate().weekOfWeekYear()

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

回答

8

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

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月5日”。

+0

这不仅不能回答这个问题(虽然它提供了很好的灵感),但它包含2个错误:逻辑表明weekEnd意味着被派生出来从lastDay,这是未使用的,不是第一天;此外,答案指的是未定义的变量“月”。我试图解决公然(但可能令人困惑)的错误被脾气暴躁的评论者拒绝。 – Lambart 2014-05-04 00:52:33

+0

@兰巴特的确你是对的。我修复了错误并添加了一段,希望能更好地回答这个问题。不要让编辑让你失望:) – 2014-05-05 09:08:45

+0

很好的编辑,并感谢您的鼓励。 :) – Lambart 2014-05-05 18:25:57

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