2012-06-19 16 views
0

這是我在兩個日期之間打印的代碼,它不包括星期六和星期日,但是這個不打印給定月份的最後日期。最後日期沒有打印在org.joda.time.LocalDate中?

import org.joda.time.DateTimeConstants; 
import org.joda.time.LocalDate; 

public class DatesexcludingWeekend { 
    public static void main(String[] args) { 
     final LocalDate start = new LocalDate(2012, 05, 1); 
     final LocalDate end = new LocalDate(2012, 05, 31); 
     LocalDate weekday = start; 
     if (start.getDayOfWeek() == DateTimeConstants.SATURDAY|| start.getDayOfWeek() == DateTimeConstants.SUNDAY) { 
      weekday = weekday.plusWeeks(1).withDayOfWeek(DateTimeConstants.MONDAY); 
     } 

     while (weekday.isBefore(end)) { 
      String dateValues[] = weekday.toString().split("-"); 
      //System.out.println(dateValues[2]+"/"+dateValues[1]+"/"+dateValues[0]); 
      String date=dateValues[2]+"/"+dateValues[1]+"/"+dateValues[0]; 
      System.out.println("date : "+date); 
      if (weekday.getDayOfWeek() == DateTimeConstants.FRIDAY) 
       weekday = weekday.plusDays(3); 
      else 
       weekday = weekday.plusDays(1); 
     } 
    } 
} 

這裏是出把上面的代碼中:

date : 01/05/2012 
date : 02/05/2012 
date : 03/05/2012 
date : 04/05/2012 
date : 07/05/2012 
date : 08/05/2012 
date : 09/05/2012 
date : 10/05/2012 
date : 11/05/2012 
date : 14/05/2012 
date : 15/05/2012 
date : 16/05/2012 
date : 17/05/2012 
date : 18/05/2012 
date : 21/05/2012 
date : 22/05/2012 
date : 23/05/2012 
date : 24/05/2012 
date : 25/05/2012 
date : 28/05/2012 
date : 29/05/2012 
date : 30/05/2012 

如果你看到這個31-05/2012是沒有得到印刷

請幫我得到這個解決。

問候 託尼

回答

2

這是因爲你說:

while (weekday.isBefore(end)) 

如果要包括的最後一天,然後兩個選擇:

  1. 設置結束後一天目標日期(原樣爲while

  2. 更改while條件。

一種替代,而條件是這樣的:

while (weekday.isBefore(end) || weekday.equals(end)) 
+0

好什麼我需要做的就是最後的日期? – SAR

+0

感謝它的幫助和解決了我的問題 – SAR

2

我認爲這個問題是在你的while循環:

weekday.isBefore(end) 

31/05/2012end之前簡單 - 他們是相等的日期

查看javadoc

2

我懷疑這是因爲你已經使用

while (weekday.isBefore(end)) 

而且31/05/2012不是31/05/2012之前。

2

當天2012, 05, 31不在2012, 05, 31之前。

嘗試改變weekday.isBefore(end)!end.isBefore(weekday)