我想查找给定月份中的所有星期六和星期天。我该怎么做?如何在给定的月份中查找周六和周日?
4
A
回答
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,将让您的生活轻松了许多......
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
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;
}
它会给你确切的结果。
感谢您的回复 – Venkat 2012-03-29 04:35:16
感谢您的代码。 。 – 2017-11-28 07:36:32