我需要制作一个应用程序来统计它一直有多少个工作日。例如是2014年9月23日。这是本月的第17个工作日。显然它排除了周末。当这个月结束时,柜台将重新开始。所以,当日期是十月1日那么计数器将等于1.用日期参数计算工作日
我已经有了这组代码它今天的日期是11-24-14正确工作。输出是17,这是正确的。但在其他日期这是错误的。我没有进行一些验证,例如周末检查,因为我正在测试逻辑。
这里的代码块:
Date dateToday = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(dateToday);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_WEEK);
int week = cal.get(Calendar.WEEK_OF_MONTH);
int dayNo=0;
System.out.println("year= " + year + " month= " + month + " day= "
+ day + " week= " + week);
if ((day == Calendar.SATURDAY) && (day == Calendar.SUNDAY)) {
willPush = false;
}else{
if(week>4){
week-=1;
}
if(week==1){
dayNo+=day-1;
}else if(week==2){
dayNo=day+5;
}else if(week==3){
dayNo=day+10;
}else if(week==4){
dayNo=day+15;
}else if(week==5){
dayNo=day+20;
}
dayNo-=1;
}
System.out.println("DayNO: "+dayNo);
更新:只是想通了,这个逻辑是有缺陷的,非常有缺陷的。将尝试一种新的方法,我正在考虑循环遍历本月的日子,然后检查它们是否是周末。不知道这是不是最好的主意。
你不能这样做,没有理由的第一周是5个工作日长(并且它打破了你所有的逻辑) – yunandtidus 2014-11-24 08:40:33
是的。在发布此信息后发现这一点。我一直在尝试一些新的逻辑 – 2014-11-24 08:43:54
如果你选择接受它,你的任务是构建一个算法,计算O(1)中的这个。提示:您的范围将包括(i)开始存根,(ii)整数周数,(iii)末端存根。对于(i)和(iii)计算周末天数,因为(ii)工作日是总天数* 5/7。这就是我在生产中的做法(为具有不同周末定义的场所提供津贴)。当前的答案很糟糕,因为它们是O(N)。 – Bathsheba 2014-11-24 09:23:39