Java Data Type How to - Compute the first day to display in a calendar table view








Question

We would like to know how to compute the first day to display in a calendar table view.

Answer

import java.util.Calendar;
import java.util.Date;
/* w ww  .  java 2s  .  co  m*/
public class Main {

    public static void main( String[] args ) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime( new Date() );

      calendar.set( Calendar.DAY_OF_MONTH, 1 );
      // day of week for first date of month
      int weekOfFirstDate = calendar.get( Calendar.WEEK_OF_YEAR );

      int lastDateOfMonth = calendar.getActualMaximum( Calendar.DAY_OF_MONTH );
      calendar.set( Calendar.DAY_OF_MONTH, lastDateOfMonth );
      // day of week for last date of month

      int weekOfLastDate = calendar.get( Calendar.WEEK_OF_YEAR );

      calendar.roll( Calendar.MONTH, false );
      int lastDateOfPrevMonth = calendar.getActualMaximum( Calendar.DAY_OF_MONTH );

      int weeksToDisplay = weekOfLastDate - weekOfFirstDate + 1;
      int[] days = new int[weeksToDisplay * 7];

      int firstDayPosition = 3;

      // fill previous month
      int x = lastDateOfPrevMonth;
      for ( int i = firstDayPosition - 1; i >= 0; i-- ) {
          days[i] = x--;
      }

      // fill current month
      for ( int i = 1; i < lastDateOfMonth + 1; i++ ) {
          days[firstDayPosition - 1 + i] = i;
      }

      // fill next month
      int j = 1;
      for ( int i = lastDateOfMonth + firstDayPosition; i < days.length; i++ ) {
          days[i] = j++;
      }

      for ( int i = 0; i < days.length; i++ ) {
          if ( i % 7 == 0 ) {
              System.out.println();
          }
          System.out.print( days[i] + "\t" );
      }
    }
}

The code above generates the following result.