public static LocalDateTime parseLocalDateTime17(char[] str, int off) {
        if (off + 17 > str.length) {
            String input = new String(str, off, str.length - off);
            throw new DateTimeParseException("illegal input " + input, input, 0);
        }

        char c1 = str[off + 1];
        char c2 = str[off + 2];
        char c3 = str[off + 3];
        char c4 = str[off + 4];
        char c5 = str[off + 5];
        char c6 = str[off + 6];
        char c7 = str[off + 7];
        char c8 = str[off + 8];
        char c10 = str[off + 10];
        char c11 = str[off + 11];
        char c12 = str[off + 12];
        char c13 = str[off + 13];
        char c14 = str[off + 14];
        char c15 = str[off + 15];
        char c16 = str[off + 16];

        int year, month, dom, hour, minute, second, nanoOfSecond = 0;
        if (c4 == '-' && c7 == '-' && (c10 == 'T' || c10 == ' ') && c13 == ':' && c16 == 'Z') {
            year = digit4(str, off);
            month = digit2(str, off + 5);
            dom = digit2(str, off + 8);
            hour = digit2(str, off + 11);
            minute = digit2(str, off + 14);
            second = 0;
        } else if (c4 == '-' && c6 == '-' && (c8 == ' ' || c8 == 'T') && c11 == ':' && c14 == ':') {
            year = digit4(str, off);
            month = digit1(str, off + 5);
            dom = digit1(str, off + 7);
            hour = digit2(str, off + 9);
            minute = digit2(str, off + 12);
            second = digit2(str, off + 15);
        } else if (c2 == ' ' && c6 == ' ' && c11 == ' ' && c14 == ':') {
            dom = digit2(str, off);
            month = DateUtils.month(c3, c4, c5);
            year = digit4(str, off + 7);
            hour = digit2(str, off + 12);
            minute = digit2(str, off + 15);
            second = 0;
        } else if (c1 == ' ' && c5 == ' ' && c10 == ' ' && c12 == ':' && c14 == ':') {
            // d MMM yyyy H:m:ss
            // 6 DEC 2020 1:3:14
            dom = digit1(str, off);
            month = DateUtils.month(c2, c3, c4);
            year = digit4(str, off + 6);
            hour = digit1(str, off + 11);
            minute = digit1(str, off + 13);
            second = digit2(str, off + 15);
        } else if (c1 == ' ' && c5 == ' ' && c10 == ' ' && c12 == ':' && c15 == ':') {
            // d MMM yyyy H:mm:s
            // 6 DEC 2020 1:13:4
            dom = digit1(str, off);
            month = DateUtils.month(c2, c3, c4);
            year = digit4(str, off + 6);
            hour = digit1(str, off + 11);
            minute = digit2(str, off + 13);
            second = digit1(str, off + 16);
        } else if (c1 == ' ' && c5 == ' ' && c10 == ' ' && c13 == ':' && c15 == ':') {
            // d MMM yyyy HH:m:s
            // 6 DEC 2020 11:3:4
            dom = digit1(str, off);
            month = DateUtils.month(c2, c3, c4);
            year = digit4(str, off + 6);
            hour = digit2(str, off + 11);
            minute = digit1(str, off + 14);
            second = digit1(str, off + 16);
        } else if (c2 == ' ' && c6 == ' ' && c11 == ' ' && c13 == ':' && c15 == ':') {
            // dd MMM yyyy H:m:s
            // 16 DEC 2020 1:3:4
            dom = digit2(str, off);
            month = DateUtils.month(c3, c4, c5);
            year = digit4(str, off + 7);
            hour = digit1(str, off + 12);
            minute = digit1(str, off + 14);
            second = digit1(str, off + 16);
        } else {
            year = digit4(str, off);
            month = digit2(str, off + 4);
            dom = digit2(str, off + 6);
            hour = digit2(str, off + 8);
            minute = digit2(str, off + 10);
            second = digit2(str, off + 12);
            nanoOfSecond = readNanos(str, 3, off + 14);
        }

        return (year | month | dom | hour | minute | second | nanoOfSecond) < 0
                ? null
                : LocalDateTime.of(year, month, dom, hour, minute, second, nanoOfSecond);
    }
yyyy-MM-ddTHH:mmZ
yyyy-MM-dd HH:mmZ
yyyy-M-dTHH:mm:ss
yyyy-M-d HH:mm:ss
core/src/main/java/com/alibaba/fastjson2/util/DateUtils.java