I need to repeat a date every last day of February, I am using Joda time to use a rule to generate the dates for days, weeks, months, etc. For Months is working fine but when is about years I receive wrong outputs.
private static List<DateTime> calculateRecurrentDates(DateTime startDate, String recurrentRule) {
List<DateTime> dates = new ArrayList<DateTime>();
TimeStamp startDate = Timestamp.valueOf("2011-02-28 10:10:10");
String recurrentRule = "RRULE:FREQ=YEARLY;COUNT=6;INTERVAL=1;";
String leapYearRule = "RRULE:FREQ=YEARLY;COUNT=6;INTERVAL=1;BYMONTHDAY=28,29;BYSETPOS=-1";
try {
DateTimeIterable range = DateTimeIteratorFactory.createDateTimeIterable(recurrentRule, startDate, DateTimeZone.UTC, true);
for (DateTime date : range) {
dates.add(date);
}
} catch (ParseException e) {
dates = null;
logger.error(e.getMessage());
}
return dates;
}
But I receive this:
2011-02-28T10:10:10.000Z
2012-02-28T10:10:10.000Z
2013-02-28T10:10:10.000Z
2014-02-28T10:10:10.000Z
2015-02-28T10:10:10.000Z
2016-02-28T10:10:10.000Z
and in the case is in a leap year this:
2012-02-29T10:10:10.000Z
2012-12-29T10:10:10.000Z
2013-12-29T10:10:10.000Z
2014-12-29T10:10:10.000Z
2015-12-29T10:10:10.000Z
2016-12-29T10:10:10.000Z
2017-12-29T10:10:10.000Z
How I write one rule to get the last day of February every year?