docs: private Optional<Period> parseDuration(final Symbol periodSym) throws Timex2Exception {
      checkNotNull(periodSym);
  
      final String period = periodSym.toString();
      if (!period.startsWith("P")) {
        return Optional.absent();
      }
  
      for (final Map.Entry<Pattern, Integer> timexExtension : periodPatternsToYearMultipliers
          .entrySet()) {
        final Matcher m = timexExtension.getKey().matcher(period);
        try {
          if (m.lookingAt()) {
            return Optional
                .of(Period.years(timexExtension.getValue() * Integer.parseInt(m.group(1))));
          }
        } catch (final NumberFormatException nfe) {
          log.warn("Failed to parse duration {}, skipping. Due to {}", period, nfe);
          return Optional.absent();
        }
      }
  
      try {
        return Optional.of(ISO8601_PERIOD_PARSER.parsePeriod(period));
      } catch (final IllegalArgumentException iae) {
        return Optional.absent();
      }
    }