今天突然想着自己一年总共工作多少天,休息多少天,想手工算一算觉得麻烦,还是写个程序算一算好了。下面是代码:
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class JobTime {
int year;
int month;
int day;
public JobTime(int year){
this.year=year;
}
public JobTime(int year,int month,int day){
this.year=year;
this.month=month-1;
this.day=day;
}
/* 法定休息日
* 一、元旦:2012年1月1日至3日放假调休,共3天。2011年12月31日(星期六)上班。
二、春节:1月22日至28日放假调休,共7天。1月21日(星期六)、1月29日(星期日)上班。
三、清明节:4月2日至4日放假调休,共3天。3月31日(星期六)、4月1日(星期日)上班。
四、劳动节:4月29日至5月1日放假调休,共3天。4月28日(星期六)上班。
五、端午节:6月22日至24日放假公休,共3天。
六、中秋节、国庆节:9月30日至10月7日放假调休,共8天。9月29日(星期六)上班。
*/
public List<Calendar> getWorkWeekDay(){
//周末工作的情况
List<Calendar> list=new ArrayList<Calendar>();
Calendar cr=Calendar.getInstance();
cr.set(year, 0, 21);
list.add(cr);
Calendar cr1=Calendar.getInstance();
cr1.set(year, 0, 29);
list.add(cr1);
Calendar cr2=Calendar.getInstance();
cr2.set(year, 2, 31);
list.add(cr2);
Calendar cr3=Calendar.getInstance();
cr3.set(year, 3, 1);
list.add(cr3);
Calendar cr4=Calendar.getInstance();
cr4.set(year, 3, 28);
list.add(cr4);
Calendar cr5=Calendar.getInstance();
cr5.set(year, 8, 29);
list.add(cr5);
return list;
}
public List<Calendar> getDiesnon(){
//法定节假日休的的天数放在集合中
List<Calendar> list=new ArrayList<Calendar>();
//元旦
Calendar cr=Calendar.getInstance();
cr.set(year, 0, 1);
list.add(cr);
Calendar cr1=Calendar.getInstance();
cr1.set(year, 0, 2);
list.add(cr1);
Calendar cr2=Calendar.getInstance();
cr2.set(year, 0,3);
list.add(cr2);
//春节
Calendar cr3=Calendar.getInstance();
cr1.set(year, 0, 22);
list.add(cr3);
Calendar cr4=Calendar.getInstance();
cr1.set(year, 0, 23);
list.add(cr4);
Calendar cr5=Calendar.getInstance();
cr5.set(year, 0, 24);
list.add(cr5);
Calendar cr6=Calendar.getInstance();
cr6.set(year, 0, 25);
list.add(cr6);
Calendar cr7=Calendar.getInstance();
cr7.set(year, 0, 26);
list.add(cr7);
Calendar cr8=Calendar.getInstance();
cr8.set(year, 0, 27);
list.add(cr8);
Calendar cr9=Calendar.getInstance();
cr9.set(year, 0, 28);
list.add(cr9);
//清明节
Calendar cr10=Calendar.getInstance();
cr10.set(year, 3, 2);
list.add(cr10);
Calendar cr11=Calendar.getInstance();
cr11.set(year, 3, 3);
list.add(cr11);
Calendar cr12=Calendar.getInstance();
cr12.set(year, 3, 4);
list.add(cr12);
//劳动节
Calendar cr13=Calendar.getInstance();
cr13.set(year, 3, 29);
list.add(cr13);
Calendar cr14=Calendar.getInstance();
cr14.set(year, 3, 30);
list.add(cr14);
Calendar cr15=Calendar.getInstance();
cr15.set(year, 4, 1);
list.add(cr15);
//端午节
Calendar cr16=Calendar.getInstance();
cr16.set(year, 5, 22);
list.add(cr16);
Calendar cr17=Calendar.getInstance();
cr17.set(year, 5, 23);
list.add(cr17);
Calendar cr18=Calendar.getInstance();
cr18.set(year, 5, 24);
list.add(cr18);
//中秋节国庆节
Calendar cr19=Calendar.getInstance();
cr19.set(year,8, 30);
list.add(cr19);
Calendar cr20=Calendar.getInstance();
cr20.set(year,9,1);
list.add(cr20);
Calendar cr21=Calendar.getInstance();
cr21.set(year,9,2);
list.add(cr21);
Calendar cr22=Calendar.getInstance();
cr22.set(year,9,3);
list.add(cr22);
Calendar cr23=Calendar.getInstance();
cr23.set(year,9,4);
list.add(cr23);
Calendar cr24=Calendar.getInstance();
cr24.set(year,9,5);
list.add(cr24);
Calendar cr25=Calendar.getInstance();
cr25.set(year,9,6);
list.add(cr25);
Calendar cr26=Calendar.getInstance();
cr26.set(year,9,7);
list.add(cr26);
return list;
}
public int[] getDays(){
/*Calendar.DAY_OF_WEEK的范围是1-7.
* 1->星期日
* 2->星期一
* 3->星期二
* 4->星期三
* 5->星期四
* 6->星期五
* 7->星期六
* */
/*Calendar.MONTH的范围是0-11;
* 0->一月
* 1->二月
* 2->三月
* 3->四月
* 4->五月
* 5->六月
* 6->七月
* 7->八月
* 8->九月
* 9->十月
* 10->十一月
* 11->十二月
* */
//休息的天数
int freeDay=0;
//工作的天数
int workDay=0;
List<Calendar> listDiesnon=getDiesnon();
List<Calendar> listWorkWeekDays=getWorkWeekDay();
Calendar cldr=Calendar.getInstance();
for(int i=0;i<12;i++){
int days=getDaysOfMonth(i+1);
for(int j=1;j<=days;j++){
cldr.set(year,i,j);
if(listDiesnon.contains(cldr)){
System.out.println("法定假日");
freeDay++;
}else if(listWorkWeekDays.contains(cldr)){
System.out.println("周末工作");
workDay++;
}else{
int dayOfWeek=cldr.get(Calendar.DAY_OF_WEEK );
//周末休息
if(dayOfWeek==1||dayOfWeek==7){
freeDay+=1;
}else{
workDay+=1;
}
}
}
}
return new int[]{freeDay,workDay};
}
//获得休息的天数
public int getFreeDaysInYear(){
return getDays()[0];
}
//获得工作的天数
public int getWorkDaysInYear(){
return getDays()[1];
}
//先判断是否闰年
public boolean isLeapYear(){
boolean flag=false;
if(year%4==0&&year%100!=0||year%400==0){
flag=true;
}
return flag;
}
//获得每一个月的天数
public int getDaysOfMonth(int month){
int days=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
days=31;
}else if(month==2){
days=28;
if(isLeapYear())
days=days+1;
}else{
days=30;
}
return days;
}
public static void main(String[] args){
JobTime jt=new JobTime(2012);
int wd=jt.getWorkDaysInYear();
int fd=jt.getFreeDaysInYear();
System.out.println("2012年我们工作:"+wd+" 天");
System.out.println("2012年我们休息:"+fd+" 天");
}
}