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

Reply via email to