docs: public static long parseDuration(final String propertyName, final String propertyValue)
      {
          final char lastCharacter = propertyValue.charAt(propertyValue.length() - 1);
          if (Character.isDigit(lastCharacter))
          {
              return Long.valueOf(propertyValue);
          }
  
          if (lastCharacter != 's' && lastCharacter != 'S')
          {
              throw new NumberFormatException(
                  propertyName + ": " + propertyValue + " should end with: s, ms, us, or ns.");
          }
  
          final char secondLastCharacter = propertyValue.charAt(propertyValue.length() - 2);
          if (Character.isDigit(secondLastCharacter))
          {
              final long value = AsciiEncoding.parseLongAscii(propertyValue, 0, propertyValue.length() - 1);
              return TimeUnit.SECONDS.toNanos(value);
          }
  
          final long value = AsciiEncoding.parseLongAscii(propertyValue, 0, propertyValue.length() - 2);
  
          switch (secondLastCharacter)
          {
              case 'n':
              case 'N':
                  return value;
  
              case 'u':
              case 'U':
                  return TimeUnit.MICROSECONDS.toNanos(value);
  
              case 'm':
              case 'M':
                  return TimeUnit.MILLISECONDS.toNanos(value);
  
              default:
                  throw new NumberFormatException(
                      propertyName + ": " + propertyValue + " should end with: s, ms, us, or ns.");
          }
      }