我的要求是计算给定两个日期之间天数的数量,不包括星期六和星期日。
示例:
Start date - 10/09/15 and End date 18/09/15
Result: 7
日期为DD/MM/YY
格式。
代码:
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class DaysCounter {
private String startDate;
private String endDate;
public void calculateDate(){
@SuppressWarnings("resource")
Scanner in=new Scanner(new InputStreamReader(System.in));
System.out.println("Enter the starting date (DD/MM/YY) :");
startDate=in.next();
System.out.println("Enter the End date (DD/MM/YY) :");
endDate=in.next();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try
{
Calendar start = Calendar.getInstance();
start.setTime(sdf.parse(startDate));
Calendar end = Calendar.getInstance();
end.setTime(sdf.parse(endDate));
int workingDays = 0;
while(!start.after(end))
{
int day = start.get(Calendar.DAY_OF_WEEK);
if ((day != Calendar.SATURDAY) && (day != Calendar.SUNDAY))
workingDays++;
start.add(Calendar.DATE, 1);
}
System.out.println(workingDays);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
DaysCounter daysCounter=new DaysCounter();
daysCounter.calculateDate();
}
}
以上是上述代码的结果。
1 -
Enter the starting date (DD/MM/YY) :
14/09/15
Enter the End date (DD/MM/YY) :
20/09/15
5
2 -
Enter the starting date (DD/MM/YY) :
14/09/15
Enter the End date (DD/MM/YY) :
17/09/15
2
3 -
Enter the starting date (DD/MM/YY) :
31/08/15
Enter the End date (DD/MM/YY) :
30/09/15
21
如上面第一个例子所示,结果是正确的。
但是对于第二个例子,结果不正确,预期结果为4 。
即使是第三个例子,结果也是错误的。
即使我输入任何工作日和星期六之间的日期,也会得到错误的结果。
请建议,应该对代码进行哪些更改。
感谢。
答案 0 :(得分:4)
您在创建SimpleDateFormat
时出错,更改为yy
而不是yyyy
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
这应该可以解决你的问题。我认为你的逻辑没有任何问题。
修改强>
根据您的评论,如果您的开始日期大于结束日期,那么您必须在while
循环
if(start.after(end)) {
Calendar tempCal;
tempCal = start;
start = end;
end = tempCal;
}
答案 1 :(得分:2)
检查以下代码:
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class DaysCounter {
private String startDate;
private String endDate;
public void calculateDate(){
@SuppressWarnings("resource")
Scanner in=new Scanner(new InputStreamReader(System.in));
System.out.println("Enter the starting date (DD/MM/YY) :");
startDate=in.next();
System.out.println("Enter the End date (DD/MM/YY) :");
endDate=in.next();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try
{
Calendar start = Calendar.getInstance();
start.setTime(sdf.parse(startDate));
Calendar end = Calendar.getInstance();
end.setTime(sdf.parse(endDate));
int workingDays = 0;
while(!start.after(end))
{
int day = start.get(Calendar.DAY_OF_WEEK);
day = day + 2;
if (day > 7){
day = day -7;
}
if ((day != Calendar.SATURDAY) && (day != Calendar.SUNDAY))
workingDays++;
start.add(Calendar.DATE, 1);
}
System.out.println(workingDays);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
DaysCounter daysCounter=new DaysCounter();
daysCounter.calculateDate();
}
}