code: public void seekToMonth(String direction, String seekAmount, String month) {
      int seekAmountInt = Integer.parseInt(seekAmount);
      int monthInt = Integer.parseInt(month);
      assert(direction.equals(DIR_LEFT) || direction.equals(DIR_RIGHT));
      assert(monthInt >= 1 && monthInt <= 12);
      
      markDateInvocation();
      
      // set the day to the first of month. This step is necessary because if we seek to the 
      // current day of a month whose number of days is less than the current day, we will 
      // pushed into the next month.
      _calendar.set(Calendar.DAY_OF_MONTH, 1);
      
      // seek to the appropriate year
      if(seekAmountInt > 0) {
        int currentMonth = _calendar.get(Calendar.MONTH) + 1;
        int sign = direction.equals(DIR_RIGHT) ? 1 : -1;
        int numYearsToShift = seekAmountInt +
                (currentMonth == monthInt ? 0 : (currentMonth < monthInt ? sign > 0 ? -1 : 0 : sign > 0 ? 0 : -1));
  
        _calendar.add(Calendar.YEAR, (numYearsToShift * sign));
      }
      
      // now set the month
      _calendar.set(Calendar.MONTH, monthInt - 1);
    }
docs: seeks to a particular month
  
  @param direction the direction to seek: two possibilities
  '<' go backward
  '>' go forward
  
  @param seekAmount the amount to seek.  Must be guaranteed to parse as an integer
  
  @param month the month to seek to.  Must be guaranteed to parse as an integer
  between 1 and 12