Java 如何获取某个月的周数?

Java 如何获取某个月的周数?,java,Java,我只是想问一下,获得某个月的周数的有效方法是什么。我有一个以月数和年为参数的函数,该函数的返回值应该是一个int数组,其中包含特定月份的周数。(如下所示…) 该类的WEEK\u OF\u YEAR属性对您很有用 创建一个新日期,该日期将是给定月份的第一天。获取这一天的一周,假设您获得了start值 创建一个新日期,该日期将是给定月份的最后一天。获取这一天的一年中的一周,这样您就得到了end值 最后,创建一个简单的int[],其中包含从start到end的值 为项目创建日历实例 一个月的第一天和最

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


该类的
WEEK\u OF\u YEAR
属性对您很有用

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

创建一个新日期,该日期将是给定月份的最后一天。获取这一天的一年中的一周,这样您就得到了
end

最后,创建一个简单的
int[]
,其中包含从
start
end
的值

  • 为项目创建日历实例 一个月的第一天和最后一天
  • 然后在每个实例上调用
    get(Calendar.WEEK/OF/u YEAR)
  • 步骤[2]将返回周的开始和结束索引

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

    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 int[]getWeeksOfMonth(int月,int年)
    {
    Calendar cal=Calendar.getInstance();
    校准设置(日历年、年份);
    校准设置(日历、月份、月份);
    校准设置(日历日/月/日,1);
    int ndays=cal.getActualMaximum(日历日/月日);
    整数周[]=新整数周[ndays];
    对于(int i=0;i
    如果要为指定月份中的天数创建一个不同周数的数组,请执行以下操作:

    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]);
    }
    
    public static Integer[]getWeeksOfMonth(整数月,整数年)
    {
    Calendar cal=Calendar.getInstance();
    校准设置(日历年、年份);
    校准设置(日历、月份、月份);
    校准设置(日历日/月/日,1);
    Set weeks=新HashSet();
    int ndays=cal.getActualMaximum(日历日/月日);
    对于(int i=0;i

    (注意,最后一个示例返回一个
    Integer
    对象数组,但是修改它以返回一个
    int
    数组并不重要)

    Calendar cal=Calendar.getInstance()


    int maxWeeknumber=cal.getActualMaximum(日历周/月)

    我认为,这是一种更简单的方法:

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

    问题不清楚,请接受您之前问题的答案。复制您未接受的另一个问题!你不必重复整个月。只要看一看第一天的一周,比如说
    s
    ,最后一天的一周,比如说
    e
    ,然后构建包含
    e-s+1
    值的数组,从
    s
    e
    @Flinsch是的,你是对的。我已经更新了我的答案。弗林希:这不会在所有情况下都有效。例如,见2010年1月。一年的头三天属于第53周。第四天属于第一周。你说得对,对不起。因此,您需要对
    s>e
    (仅适用于1月份)进行如下特殊情况处理:如果
    s>e
    :构建类似
    {s,1,…,e}
    的数组。否则:像
    {s,…,e}
    那样构建数组。注意,可能会发生这种情况(结束索引<开始索引)。嗯-如何?只要是我们处理的同一个月,endIndexCalendar now = Calendar.getInstance(); System.out.println("Current week of month is : " + now.get(Calendar.WEEK_OF_MONTH));