code: @FromString
      public static Weeks parse(CharSequence text) {
          Objects.requireNonNull(text, "text");
          Matcher matcher = PATTERN.matcher(text);
          if (matcher.matches()) {
              int negate = "-".equals(matcher.group(1)) ? -1 : 1;
              String str = matcher.group(2);
              try {
                  int val = Integer.parseInt(str);
                  return of(Math.multiplyExact(val, negate));
              } catch (NumberFormatException ex) {
                  throw new DateTimeParseException("Text cannot be parsed to a Weeks", text, 0, ex);
              }
          }
          throw new DateTimeParseException("Text cannot be parsed to a Weeks", text, 0);
      }
docs: Obtains a {@code Weeks} from a text string such as {@code PnW}.
  <p>
  This will parse the string produced by {@code toString()} which is
  based on the ISO-8601 period formats {@code PnW}.
  <p>
  The string starts with an optional sign, denoted by the ASCII negative
  or positive symbol. If negative, the whole amount is negated.
  The ASCII letter "P" is next in upper or lower case.
  The ASCII integer amount is next, which may be negative.
  The ASCII letter "W" is next in upper or lower case.
  <p>
  The leading plus/minus sign, and negative values for weeks are
  not part of the ISO-8601 standard.
  <p>
  For example, the following are valid inputs:
  <pre>
  "P2W"             -- Weeks.of(2)
  "P-2W"            -- Weeks.of(-2)
  "-P2W"            -- Weeks.of(-2)
  "-P-2W"           -- Weeks.of(2)
  </pre>
  
  @param text  the text to parse, not null
  @return the parsed period, not null
  @throws DateTimeParseException if the text cannot be parsed to a period