2015-09-24 90 views
4

我的要求是計算在給定的兩個日期之間的數量,不包括週六週日如何計算JAVA中兩個不同日期之間的工作(不包括週末)天數?

實施例:

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 

如在上述第一實施例看到的RESU這是正確的。

但對於第二個示例結果不正確,預期結果是4

即使是第三個例子,結果也是不正確的。

即使當我輸入星期六和星期六之間的日期時,也會得到不正確的結果。

請注意,應該對代碼進行哪些更改。

謝謝。

+0

http://stackoverflow.com/questions/15622413/calculate-business-days-in-java-without-saturdays-sunday-and-public-holiday或http://stackoverflow.com/questions/4600034/calculate-number-of-weekdays-between-two-dates-in-java ... – XpiritO

+0

@BenWin是的我想要日期差異,但包括開始和結束日期。 –

+0

@ShashiKiran我執行你的程序,它工作正常。第二個例子給出4。 – KDM

回答

3

你在創造SimpleDateFormat錯誤,更改爲yy而不是yyyy

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy"); 

這應該解決您的問題。我的邏輯中沒有看到任何問題。

編輯

根據您的意見,如果你的啓動日期比結束日期大於你面前while循環

if(start.after(end)) { 
     Calendar tempCal; 
     tempCal = start; 
     start = end; 
     end = tempCal; 
    } 
+0

爲什麼要投票?請原諒。 OP你可以測試我的建議並告訴我們。我不確定誰沒有檢查邏輯和程序就投我了票。 –

+1

經測試,我的代碼給出了預期的結果 –

+0

@NiteshVirani按預期工作。 –

1

檢查下面的代碼,將其交換:

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(); 
} 
} 
+0

這工作正常。但如果我輸入開始日期大於結束日期得到的結果爲0.是否有任何邏輯呢? –

相關問題