如何获得某个月的周数?

时间:2010-10-25 11:02:18

标签: java

我只想问一下获得某个月的周数的有效方法。我有一个月号和功能的功能。 year作为参数,函数的返回值应该是一个int数组,其中包含特定月份的周数。(如下所示......)

public int[] getWeeksOfMonth(int month, int year){
            //what's the efficient way to implement this??
}

5 个答案:

答案 0 :(得分:9)

Calendar类的WEEK_OF_YEAR属性对您有用。

创建一个新日期,该日期将是给定月份的第一天。获取当天的一周,假设您获得start价值。

创建一个新日期,该日期将是给定月份的最后一天。获取当天的一周中的一周,现在您获得end值。

最后,创建一个简单的int[],其中包含startend的值。

答案 1 :(得分:5)

日历cal = Calendar.getInstance();

int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);

答案 2 :(得分:3)

我不确定您是否要返回一个长度等于月中天数的数组,每个值都是相应日期的星期数,或者所有不同指定月份中天数的周数。假设它是前者,这应该有效:

public static int[] getWeeksOfMonth(int month, int year)
{
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, 1);

    int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    int weeks[] = new int[ndays];
    for (int i = 0; i < ndays; i++)
    {
        weeks[i] = cal.get(Calendar.WEEK_OF_YEAR);
        cal.add(Calendar.DATE, 1);
    }
    return weeks;
}

如果您想要指定月份中各天的不同周数数组:

public static Integer[] getWeeksOfMonth(int month, int year)
{
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, 1);

    Set<Integer> weeks = new HashSet<Integer>();
    int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    for (int i = 0; i < ndays; i++)
    {
        weeks.add(cal.get(Calendar.WEEK_OF_YEAR));
        cal.add(Calendar.DATE, 1);
    }

    return weeks.toArray(new Integer[0]);
}

(注意这最后一个示例返回一个Integer个对象的数组,但修改它以返回int的数组是微不足道的。

答案 3 :(得分:3)

我认为,这更为简单:

Calendar now = Calendar.getInstance();

System.out.println("Current week of month is : " +
            now.get(Calendar.WEEK_OF_MONTH));

答案 4 :(得分:0)

  1. 为。创建日历实例 这个月的第一天和最后一天。
  2. 然后在每个实例上调用get(Calendar.WEEK_OF_YEAR)
  3. 步骤[2]将返回周的开始和结束索引