code: private static void parseToday(String value, String lowerValue, Calendar c) throws DateParseException {
          if (lowerValue.length() > TODAY_LENGTH) {
              Matcher matcher = TODAY_OFFSET_PATTERN.matcher(lowerValue);
              if (!matcher.find()) {
                  throw new DateParseException("Improper value in 'TODAY' value: " + value
                          + ". 'TODAY' must be followed by + or -, then numeric offset");
              }
              if (matcher.groupCount() != 3) {
                  throw new DateParseException("Improper value in 'TODAY' value: " + value + ". Pattern match returned "
                          + matcher.groupCount() + " instead of 3");
              }
              char sign = matcher.group(2).charAt(0);
              if (sign != '+' && sign != '-') {
                  throw new DateParseException("Improper sign in 'TODAY' value '" + lowerValue + "'");
              }
              String offsetStr = matcher.group(3);
              int offset;
              try {
                  offset = Integer.parseInt(offsetStr);
              } catch (NumberFormatException e) {
                  throw new DateParseException("Improper offset in 'TODAY' value '" + value + "'");
              }
              if (sign == '-') {
                  offset = -offset;
              }
              c.add(Calendar.DATE, offset);
          }
      }
docs: Parses "TODAY" type specification, and applies offset (if any) to calendar value.
  @param value original value
  @param lowerValue lower cased value.
  @param c Calendar with appropriate offset applied.
  @throws DateParseException if anything is wrong with the TODAY specification.