我的要求是计算给定两个日期之间的天数,不包括星期六和星期日.
例:
Start date - 10/09/15 and End date 18/09/15
Result: 7
Run Code Online (Sandbox Code Playgroud)
日期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();
}
}
Run Code Online (Sandbox Code Playgroud)
以下是上述代码的结果.
1 -
Enter the starting date (DD/MM/YY) :
14/09/15
Enter the End date (DD/MM/YY) :
20/09/15
5
Run Code Online (Sandbox Code Playgroud)
2 -
Enter the starting date (DD/MM/YY) :
14/09/15
Enter the End date (DD/MM/YY) :
17/09/15
2
Run Code Online (Sandbox Code Playgroud)
3 -
Enter the starting date (DD/MM/YY) :
31/08/15
Enter the End date (DD/MM/YY) :
30/09/15
21
Run Code Online (Sandbox Code Playgroud)
如上面第一个例子所示,结果是正确的.
但是对于第二个例子,结果是不正确的,预期结果是4.
即使是第三个例子,结果也是不正确的.
即使我输入任何工作日和星期六之间的日期得到错误的结果.
请建议,应该对代码进行哪些更改.
谢谢.
你创建时有错误SimpleDateFormat,改为yy改为yyyy
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题。我没有看到你的逻辑有任何问题。
根据您的评论,如果您的开始日期大于结束日期,那么您必须在while循环之前交换它
if(start.after(end)) {
Calendar tempCal;
tempCal = start;
start = end;
end = tempCal;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4668 次 |
| 最近记录: |