在org.joda.time.LocalDate中没有打印上一个日期?

时间:2012-06-19 11:59:44

标签: java jodatime

这是我在两个日期之间打印的代码,它不包括星期六和星期日,但是这个不打印给定月份的最后日期。

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未打印

请帮我解决这个问题。

此致 贝

4 个答案:

答案 0 :(得分:2)

因为你说:

while (weekday.isBefore(end)) 

如果你想包括最后一天,那么有两个选择:

  1. 将结束时间设定为目标日期后的一天(保持while状态)

  2. 更改while条件。

  3. 另一种条件就是这样:

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

答案 1 :(得分:2)

我认为问题出在你的while循环中:

weekday.isBefore(end)

31/05/2012不仅仅是在end之前 - 它们是相同的日期

请参阅javadoc

答案 2 :(得分:2)

我怀疑是因为你使用了

while (weekday.isBefore(end))

并且31/05/2012不在2012年5月31日之前。

答案 3 :(得分:2)

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

尝试将weekday.isBefore(end)更改为!end.isBefore(weekday)