2012-03-28 171 views

回答

8

最简单的方法是只遍历一个月中的所有日子,并检查每个星期中的每一天。例如:

// This takes a 1-based month, e.g. January=1. If you want to use a 0-based 
// month, remove the "- 1" later on. 
public int countWeekendDays(int year, int month) { 
    Calendar calendar = Calendar.getInstance(); 
    // Note that month is 0-based in calendar, bizarrely. 
    calendar.set(year, month - 1, 1); 
    int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 

    int count = 0; 
    for (int day = 1; day <= daysInMonth; day++) { 
     calendar.set(year, month - 1, day); 
     int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); 
     if (dayOfWeek == Calendar.SUNDAY || dayOfweek == Calendar.SATURDAY) { 
      count++; 
      // Or do whatever you need to with the result. 
     } 
    } 
    return count; 
} 

绝对相信有这样做的更有效的方法 - 但是这就是我下手,优化当我发现它的速度太慢。

请注意,如果你能使用Joda Time,将让您的生活轻松了许多......

+0

感谢您的回复 – Venkat 2012-03-29 04:35:16

+0

感谢您的代码。 。 – 2017-11-28 07:36:32

1

试试这个:在以前的答案

import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class Sundays { 
    public static void main(String[] args) { 
     int year = 2012; 

     // put the month you want 
     int month = Calendar.JANUARY; 

     Calendar cal = new GregorianCalendar(year, month, 1); 
     do { 
      int day = cal.get(Calendar.DAY_OF_WEEK); 
      if (day == Calendar.SATURDAY || day == Calendar.SUNDAY) { 
       System.out.println(cal.get(Calendar.DAY_OF_MONTH)); 
      } 
      cal.add(Calendar.DAY_OF_YEAR, 1); 
     } while (cal.get(Calendar.MONTH) == month); 
    } 
} 
+0

感谢您的回复 – Venkat 2012-03-29 04:50:15

1

基地,我有一个小的修改 当你找到第一个星期六和星期天时,你可以简单地增加7天,直到月份改变。

+0

感谢您的合作 – Venkat 2012-03-29 04:50:32

+0

如果您认为我的回答是好的,您是否可以提供赞赏? – Bear 2012-03-29 07:52:40

0

请经过这个方法,我面对很多最后我创造了我自己的。

public static int getDayDiff(String dateFrom, String dateTo){ // DD/MM/YYYY 
    Timestamp tDtF = getTimestampDDmmYYYY(dateFrom);//returning timestamp from/DD/MM/YYYY 
    Timestamp tDtT = getTimestampDDmmYYYY(dateTo); 
    Calendar dtF = new GregorianCalendar(); 
    Calendar dtT = new GregorianCalendar(); 
    dtF.setTimeInMillis(tDtF.getTime()); 
    dtT.setTimeInMillis(tDtT.getTime()); 
    int count = 0; 
    while(dtF.before(dtT)){ 
     count++; 
     dtF.add(Calendar.DAY_OF_YEAR, 1); 
    } 
    return count; 
} 

public static int countDateSatOrSun(String dateFrom, String dateTo){//DD/MM/YYYY 
    Timestamp tDtF = getTimestampDDmmYYYY(dateFrom);//returning timestamp from/DD/MM/YYYY 
    Timestamp tDtT = getTimestampDDmmYYYY(dateTo); 
    Calendar dtF = new GregorianCalendar(); 
    Calendar dtT = new GregorianCalendar(); 
    dtF.setTimeInMillis(tDtF.getTime()); 
    dtT.setTimeInMillis(tDtT.getTime()); 
    int count = 0; 
    while(dtF.before(dtT)){ 
     if((dtF.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY| dtF.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)) 
       count++; 
     dtF.add(Calendar.DAY_OF_YEAR, 1); 
    } 
    return count; 
} 

它会给你确切的结果。