1

以下是我用来计算一个月中周数的代码。但实际上我需要周数,每周的开始日为星期一,结束日为星期日。例如,2012 年 1 月将有 5 周。但按照上述标准,它将有 6 周。
2012 年 1 月
第一周 - 01 日星期日
第二周 - 2 日星期一至 8 日星期日
第三周 - 9 日星期一至 15 日星期日
第四周 - 16 日星期一至 22 日星期日
第五周 - 23 日星期一至 29 日星期日
第六周 - 30 日星期一至 31 日星期二。

以下代码仅给出 5 周。

public class Test { 
    public static void main(String[] args) 
    { 
        Calendar calendar = Calendar.getInstance(); 
        int year = 2012; 
        int month = Calendar.JANUARY; 
        int date = 1; 
        calendar.set(year, month, date); 
        int numOfDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
        int numOfWeeksInMonth = calendar.getActualMaximum(Calendar.WEEK_OF_MONTH); 
        System.out.println("Number of Days In Month: " + numOfDaysInMonth); 
        System.out.println("Number of Weeks In Month: " + numOfWeeksInMonth);

}

}

上述代码的输出是
Number of Days In Month: 31
Number of Weeks In Month: 5

但是我需要将“月中的周数:”设为 6
*另外我正在尝试以 ddMMYYYY 格式获取每周的开始日期和结束日期.. * 我仍在努力。

谁能帮我解决这个问题?

4

4 回答 4

2

添加这个得到 "Number of Weeks In Month:" as 6

calendar.setFirstDayOfWeek(Calendar.MONDAY);
于 2013-01-16T11:04:42.117 回答
1

试试这个功能

public static void main(String[] args) {
    System.out.println(getNumberOfWeeks(2012, Calendar.JANUARY));
}

static int getNumberOfWeeks(int year, int month) {
    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month);
    c.set(Calendar.DAY_OF_MONTH, 1);
    int numOfWeeksInMonth = 1;
    while (c.get(Calendar.MONTH) == month) {
        c.add(Calendar.DAY_OF_MONTH, 1);
        if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
            numOfWeeksInMonth++;
        }
    }
    return numOfWeeksInMonth;
}
于 2013-01-16T11:00:44.403 回答
1

试试这个:

public static int noWeeks(int year,int month)
{
     Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, 1);


    int initDay = c.get(Calendar.DAY_OF_WEEK)-1
            ;
    int days =  c.getActualMaximum(Calendar.DAY_OF_MONTH);
    int a = (initDay==0?7:initDay)+days-1;
    return a/7+(a%7==0?0:1);

}
于 2013-01-16T11:27:08.263 回答
0

O algoritmo correto é esse:

public static int getTotalWeeksOfMonth(int month, int year){

    int monthIndex = month-1;

     Calendar c = Calendar.getInstance();
     c.set(Calendar.YEAR, year);
     c.set(Calendar.MONTH, monthIndex);
     c.set(Calendar.DAY_OF_MONTH, 1);

     int numOfWeeksInMonth = 0;
     while (c.get(Calendar.MONTH) == monthIndex) {
         c.add(Calendar.DAY_OF_MONTH, 1);
         int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
         if ( dayOfWeek == Calendar.SUNDAY) {
             numOfWeeksInMonth++;
         }
     }

     if (c.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
         numOfWeeksInMonth++;
     }

     return numOfWeeksInMonth;
}
于 2015-07-23T18:27:29.130 回答