Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-计算周数-开始日期为周一,结束日期为周日_Java_Date_Calendar - Fatal编程技术网

java-计算周数-开始日期为周一,结束日期为周日

java-计算周数-开始日期为周一,结束日期为周日,java,date,calendar,Java,Date,Calendar,下面是我用来计算一个月的周数的代码。但实际上我需要几个星期,每个星期的开始日是星期一,结束日是星期天。例如,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)

下面是我用来计算一个月的周数的代码。但实际上我需要几个星期,每个星期的开始日是星期一,结束日是星期天。例如,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);

}

}
上述代码的输出为
月份天数:31
月内周数:5

但是我需要得到“月内周数:”作为6
*此外,我正在尝试以ddMMYYYY格式获取每周的开始日期和结束日期* 我还在努力

有人能帮我修一下吗?

试试这个功能

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;
}
试试这个功能

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;
}
添加此项以获取“月内周数:”如6所示

calendar.setFirstDayOfWeek(Calendar.MONDAY);
添加此项以获取“月内周数:”如6所示

calendar.setFirstDayOfWeek(Calendar.MONDAY);
试试这个:

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);

}
试试这个:

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);

}

O正确的算法:

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;
}

O正确的算法:

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;
}

如果您的应用程序必须执行大量的日期和时间计算,我建议您使用Joda时间库(Apache2许可证)。有了它,一切都变得简单多了。至于,该项目现在正在进行中,团队建议迁移到类。请参阅。如果您的应用程序必须执行大量的日期和时间计算,我建议您使用Joda时间库(Apache2许可证)。有了它,一切都变得简单多了。至于,该项目现在正在进行中,团队建议迁移到类。参见。其给出的2013年和1月的产量为6。。。(noWeeks(2014年,日历1月))这是错误的。它给出的2013年和1月的产量为6。。。(noWeeks(2014年,日历,1月))这是错误的。请查看。请提供一些讨论、指导、解释、指向doc的链接,并继续。StackOverflow更像是一个代码片段库。请查看。请提供一些讨论、指导、解释、指向文档的链接,等等。StackOverflow更像是一个代码段库。