code: private static void parseNow(String value, String lowerValue, Calendar c) throws DateParseException {
          if (lowerValue.length() > NOW_LENGTH) {
              Matcher matcher = NOW_OFFSET_PATTERN.matcher(lowerValue);
              if (!matcher.find()) {
                  throw new DateParseException("Improper value in 'NOW' value: " + value
                          + ". 'NOW' must be followed by + or -, then numeric offset, then units (h{our{s}}, "
                          + "m{inute{s}}, d{ay{s}}, or y{ears}");
              }
              if (matcher.groupCount() != 4) {
                  throw new DateParseException("Improper value in 'NOW' value: " + value + ". Pattern match returned "
                          + matcher.groupCount() + " instead of 4");
              }
              char sign = matcher.group(2).charAt(0);
              if (sign != '+' && sign != '-') {
                  throw new DateParseException("Improper sign in 'NOW' value '" + lowerValue + "'");
              }
              String offsetStr = matcher.group(3);
              int offset;
              try {
                  offset = Integer.parseInt(offsetStr);
              } catch (NumberFormatException e) {
                  throw new DateParseException("Improper offset in 'NOW' value '" + value + "'");
              }
              if (sign == '-') {
                  offset = -offset;
              }
              int calendarField;
              String units = matcher.group(4);
              if ("years".startsWith(units)) {
                  calendarField = Calendar.YEAR;
              } else if ("days".startsWith(units)) {
                  calendarField = Calendar.DATE;
              } else if ("hours".startsWith(units)) {
                  calendarField = Calendar.HOUR;
              } else if ("minutes".startsWith(units)) {
                  calendarField = Calendar.MINUTE;
              } else {
                  throw new DateParseException("Improper units in 'NOW' value: '" + units + "', must be y{ear{s}}, "
                          + "d{ay{s}}, h{our{s}}, or m{inute{s}}");
              }
              c.add(calendarField, offset);
          }
      }
docs: CHECKSTYLE:OFF Cyclomatic Complexity