code: public static Date fromISODateTime(final String val,
                                       final TimeZone tz) throws BadDateException {
      try {
        synchronized (isoDateTimeTZFormat) {
          isoDateTimeTZFormat.setTimeZone(tz);
          return isoDateTimeTZFormat.parse(val);
        }
      } catch (Throwable t) {
        throw new BadDateException();
      }
    }
docs: Get Date from "yyyyMMddThhmmss" with timezone
  
  @param val String "yyyyMMddThhmmss"
  @param tz TimeZone
  @return Date
  @throws BadDateException on format error