カレンダー表示の為の配列リスト

カレンダー表示の為の日付配列リストを求めるのを前に作成したが、
前月の日付を求められるようにした。つまり、12月1日が、月曜なら前月の末日を
日曜の位置に埋め込むことができるようにした。

/**
 * 指定日の月のカレンダー配列List を作成する
 * @param date カレンダーを求めたい日付
 * @param blank 該当しない曜日の表示文字、null を渡すと前月、翌月の日付けが格納される
 * @return  List<String> String length = 7
 */

public static List<String> calendarList(Date date,String blank){
   Calendar c = Calendar.getInstance();
   c.setTime(date);
   c.set(c.get(Calendar.YEAR),c.get(Calendar.MONTH),1);
   int firstWeek = c.get(Calendar.DAY_OF_WEEK);
   c.add(Calendar.MONTH, 1);
   c.set(c.get(Calendar.YEAR),c.get(Calendar.MONTH),1);
   c.add(Calendar.DAY_OF_MONTH, - c.get(Calendar.DAY_OF_MONTH));
   int endday = c.get(Calendar.DAY_OF_MONTH);
   int last = 31;
   if (blank==null){
      c.set(Calendar.DAY_OF_MONTH,1);
      c.add(Calendar.DAY_OF_MONTH,-1);
      last = c.get(Calendar.DAY_OF_MONTH);
   }

   List<String
> list = new ArrayList<String>();
   int day = 1;
   int week = 0;
   String
 s = new String[7];
   int o = firstWeek - 1;
   if (blank==null){
      int x = last;
      for(int i=o-1;i >= 0;i--,x--){
         s[i] = Integer.toString(x);
         week++;
      }
   }else{
      for(;week < o;week++){
         s[week] = blank;
      }
   }

   for(int d=day;d <= endday;d++){
      if (week==7){
         list.add(s);
         s = new String[7];
         week = 0;
      }
      s[week] = Integer.toString(d);
      week++;
   }
   if (blank==null){
      int x = 1;
      for(;week < 7;week++,x++){
         s[week] = Integer.toString(x);
      }
   }else{
      for(;week < 7;week++){
         s[week] = blank;
      }
   }

   list.add(s);
   return list;
}