The constructor: new DateTime( startY, DateTimeConstants.JANUARY, DateTimeConstants.MONDAY, 0, 0, 0, 0); does not take the dayOfWeek as the third argument. It takes the dayOfMonth as the third argument.
You should probably use: new DateTime( startY, DateTimeConstants.JANUARY, 1, 0, 0, 0, 0); to get the first day of the year, and then: startDate = startDate.withDayOfWeek(DateTimeConstants.MONDAY); to adjust to the Monday of that week. This approach will result in 6/7 start of years being in the previous year. An alternative is to use the ISO week year algorithm (google it, eg wikipedia). This will ensure that at least 4 days of the first week is in the new year. Stephen Elam Daly wrote: > Hi All, > > I have the need to have a user enter in a number of pay periods, along > with a starting year, and I then need to generate the corresponding date > ranges for display. So, for instance, the user inputs 52 pay periods, > ie every week, and I generate a beginning date, which is the first > Monday of the week to the following Sunday. > > Now the problem I've run into involves when the first Monday of the year > is not in the starting year, as in 2008 for instance. The first Monday > is actually Dec 31, 2007. I've accounted for that in my code, but I > would appreciate if someone could tell me if this algorithm is sound as > my Joda experience is limited. > > Thanks, > - Elam Daly > > private void generateDates() { > > // 2008, 2007 etc. > int startY = Integer.valueOf( startYear.getText() ); > int periods = Integer.valueOf( numOfPeriods.getText() ).intValue(); > int numOfWeeksPerPeriod = 52/periods; > > // Start at the first monday of the year. > DateTime startDate = new DateTime( startY, > DateTimeConstants.JANUARY, DateTimeConstants.MONDAY, 0, 0, 0, 0); > > // For years(ie 2008) that the first Monday falls on the previous > year. > startDate = startDate.withDayOfWeek(DateTimeConstants.MONDAY); > > // Create rows for JTable > Vector<Vector> rows = new Vector(); > // Row data is Pay Period, Start Date, End Date. > Vector row = new Vector( > Arrays.asList(1,startDate,startDate.plusDays(numOfWeeksPerPeriod*7-1) ); > rows.add(row); > for(int i=2;i<=periods;i++) { > startDate = startDate.plusWeeks(numOfWeeksPerPeriod); > row = new Vector( > Arrays.asList(i,startDate,startDate.plusDays(numOfWeeksPerPeriod*7-1) ); > rows.add(row); > } > ((DefaultTableModel)groupTable.getModel()).setDataVector(rows, > columns); > } > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Joda-interest mailing list > Joda-interest@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/joda-interest ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Joda-interest mailing list Joda-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/joda-interest