private static LocalDateTime toLocalDateTime()

in eventmesh-connectors/eventmesh-connector-canal/src/main/java/org/apache/eventmesh/connector/canal/SqlUtils.java [681:756]


    private static LocalDateTime toLocalDateTime(String value) {
        if (value.trim().length() >= 4) {
            String dateStr2 = removeZone(value);
            int len = dateStr2.length();
            if (len == 4) {
                return LocalDateTime.of(Integer.parseInt(dateStr2), 1, 1, 0, 0, 0, 0);
            }
            if (dateStr2.charAt(4) == '-') {
                switch (len) {
                    case 7:
                        String[] dataParts = dateStr2.split("-");
                        return LocalDateTime.of(Integer.parseInt(dataParts[0]), Integer.parseInt(dataParts[1]), 1, 0, 0, 0, 0);
                    case 8:
                    case 9:
                    case 11:
                    case 12:
                    case 14:
                    case 15:
                    case 17:
                    case 18:
                    default:
                        String[] dataTime = dateStr2.split(" ");
                        String[] dataParts2 = dataTime[0].split("-");
                        String[] timeParts = dataTime[1].split(":");
                        String[] secondParts = timeParts[2].split("\\.");
                        secondParts[1] = StringUtils.rightPad(secondParts[1], 9, Constants.CJ_MINOR_VERSION);
                        return LocalDateTime.of(Integer.parseInt(dataParts2[0]), Integer.parseInt(dataParts2[1]), Integer.parseInt(dataParts2[2]),
                            Integer.parseInt(timeParts[0]), Integer.parseInt(timeParts[1]), Integer.parseInt(secondParts[0]),
                            Integer.parseInt(secondParts[1]));
                    case 10:
                        String[] dataParts3 = dateStr2.split("-");
                        return LocalDateTime.of(Integer.parseInt(dataParts3[0]), Integer.parseInt(dataParts3[1]), Integer.parseInt(dataParts3[2]), 0,
                            0, 0, 0);
                    case 13:
                        String[] dataTime2 = dateStr2.split(" ");
                        String[] dataParts4 = dataTime2[0].split("-");
                        return LocalDateTime.of(Integer.parseInt(dataParts4[0]), Integer.parseInt(dataParts4[1]), Integer.parseInt(dataParts4[2]),
                            Integer.parseInt(dataTime2[1]), 0, 0, 0);
                    case 16:
                        String[] dataTime3 = dateStr2.split(" ");
                        String[] dataParts5 = dataTime3[0].split("-");
                        String[] timeParts2 = dataTime3[1].split(":");
                        return LocalDateTime.of(Integer.parseInt(dataParts5[0]), Integer.parseInt(dataParts5[1]), Integer.parseInt(dataParts5[2]),
                            Integer.parseInt(timeParts2[0]), Integer.parseInt(timeParts2[1]), 0, 0);
                    case 19:
                        String[] dataTime4 = dateStr2.split(" ");
                        String[] dataParts6 = dataTime4[0].split("-");
                        String[] timeParts3 = dataTime4[1].split(":");
                        return LocalDateTime.of(Integer.parseInt(dataParts6[0]), Integer.parseInt(dataParts6[1]), Integer.parseInt(dataParts6[2]),
                            Integer.parseInt(timeParts3[0]), Integer.parseInt(timeParts3[1]), Integer.parseInt(timeParts3[2]), 0);
                }
            } else if (dateStr2.charAt(2) == ':') {
                switch (len) {
                    case 5:
                        String[] timeParts4 = dateStr2.split(":");
                        return LocalDateTime.of(0, 1, 1, Integer.parseInt(timeParts4[0]), Integer.parseInt(timeParts4[1]), 0, 0);
                    case 8:
                        String[] timeParts5 = dateStr2.split(":");
                        return LocalDateTime.of(0, 1, 1, Integer.parseInt(timeParts5[0]), Integer.parseInt(timeParts5[1]),
                            Integer.parseInt(timeParts5[2]), 0);
                    default:
                        String[] timeParts6 = dateStr2.split(":");
                        String[] secondParts2 = timeParts6[2].split("\\.");
                        secondParts2[1] = StringUtils.rightPad(secondParts2[1], 9, Constants.CJ_MINOR_VERSION);
                        return LocalDateTime.of(0, 1, 1, Integer.parseInt(timeParts6[0]), Integer.parseInt(timeParts6[1]),
                            Integer.parseInt(secondParts2[0]), Integer.parseInt(secondParts2[1]));
                }
            } else {
                throw new UnsupportedOperationException(value.getClass() + ", value '" + value + "' , parse to local date time failed.");
            }
        } else if (StringUtils.isNumeric(value)) {
            return LocalDateTime.of(Integer.parseInt(value), 1, 1, 0, 0, 0, 0);
        } else {
            throw new DateTimeException(value + " format error.");
        }
    }