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.");
}
}