问题描述
|现在在用s2s2h3做考勤统计,能得到月天数,但是一个月中的星期天的个数求不出来了,请大家忙下! 最好是不要套循环! |
解决方案
import java.util.Date;import java.util.Calendar;import java.text.SimpleDateFormat;class Demo{//返回当前年份int getYear(){Date date=new Date();String year=new SimpleDateFormat("yyyy").format(date);return Integer.parseInt(year);}//返回当前月份int getMonth(){Date date=new Date();String month=new SimpleDateFormat("MM").format(date);return Integer.parseInt(month);}//判断闰年boolean isLeap(int year){if(((year%100==0)&&year%400==0)||((year%100!=0)&&year%4==0))return true;elsereturn false;}//返回当月天数int getDays(int year,int month){int days;int FebDay=28;if(isLeap(year))FebDay=29;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;case 4:case 6:case 9:case 11:days=30;break;case 2:days=FebDay;break;default:days=0;break;}return days;}//返回当月星期天数int getSundays(int year,int month){ int sundays=0; SimpleDateFormat sdf=new SimpleDateFormat("EEEE");Calendar setDate= Calendar.getInstance();//从第一天开始int day;for(day=1;day<=getDays(year,month);day++){setDate.set(Calendar.DATE,day);String str=sdf.format(setDate.getTime());if(str.equals("星期日")){sundays++; }}return sundays;}public static void main(String[] args){Demo demo=new Demo();System.out.println ("本月有"+demo.getDays(demo.getYear(),demo.getMonth())+"天");System.out.println ("本月有"+demo.getSundays(demo.getYear(),demo.getMonth())+"个星期天"); } }
解决方案二:
不好意思,用了我之前的代码,这里改成return sundaycounts.呵呵
解决方案三:
package com.expotia.tour;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DateDemo {public static String formatDate(Date date) {String formDate = "";SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");formDate = format.format(date);return formDate;}public static Date formatDate(String date) throws ParseException {Date time = new Date();SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");time = format.parse(date);return time;}/** * 计算指定年度共有多少个周。 * * @param year * 格式 yyyy ,必须大于1900年度 小于9999年 * @return */public static int getWeekNumByYear(final int year) {if (year < 1900 || year > 9999) {throw new NullPointerException("年度必须大于等于1900年小于等于9999年");}int result = 52;// 每年至少有52个周 ,最多有53个周。String date = getYearWeekFirstDay(year, 53);if (date.substring(0, 4).equals(year + "")) { // 判断年度是否相符,如果相符说明有53个周。// System.out.println(date);result = 53;}return result;}/** * 计算某年某周的开始日期 * * * @param yearNum * 格式 yyyy ,必须大于1900年度 小于9999年 * * @param weekNum * 1到52或者53 * @return 日期,格式为yyyy-MM-dd */public static String getYearWeekFirstDay(int yearNum, int weekNum) {Calendar cal = Calendar.getInstance();cal.setFirstDayOfWeek(Calendar.SUNDAY); // 设置每周的第一天为星期日cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 每周从周日开始// 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期日的那个周。cal.setMinimalDaysInFirstWeek(7); // 设置每周最少为7天cal.set(Calendar.YEAR, yearNum);cal.set(Calendar.WEEK_OF_YEAR, weekNum);// 分别取得当前日期的年、月、日return formatDate(cal.getTime());}public static int weeksBetweenDays(String start, String end) {int counts = 1;int sundaycounts=1;Calendar c = Calendar.getInstance();Calendar c1 = Calendar.getInstance();try {Date startDate = formatDate(start);Date endDate = formatDate(end);c.setTime(startDate);c1.setTime(endDate);int weekofYear = c.get(Calendar.WEEK_OF_YEAR);int weekofYear1 = c1.get(Calendar.WEEK_OF_YEAR);int startDayOfWeek=c.get(Calendar.DAY_OF_WEEK);int endDayOfWeek=c1.get(Calendar.DAY_OF_WEEK);counts = weekofYear1 - weekofYear + 1;if(startDayOfWeek==Calendar.SUNDAY ){//如果开始的日期是星期天,那么就刚好等于这两个日期中的自然周数,如果开始的日期不是星期天,那么减1就oksundaycounts=counts;}else{sundaycounts=counts-1;}// }} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return counts;}}
解决方案四:
public static void showDate(){Date date=new Date();int year =date.getYear();int month=date.getMonth()+1;int length=0;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12: length=31; break;case 4:case 6:case 9:case 11: length=30; break;case 2:if((year%4==0)&&(year%100!=0)||(year%400==0))length=29;elselength=28;}int sun=0;int sat=0;for(int i=1;i<=length;i++){Date date1=new Date(year,month-1,i);int showWeek=date1.getDay();if(showWeek==0){ sun++;}if(showWeek==6){ sat++;}}System.out.println("星期天数:"+sun);System.out.println("星期六天数:"+sat);System.out.println("length:"+length);}