@Override
    public Object parse(SourceData sourceData, int rowIndex, Context context) {
        Object dateTimeExprObj = dateTimeExprParser.parse(sourceData, rowIndex, context);
        if (dateTimeExprObj == null) {
            return null;
        }
        String dateTimeStr = dateTimeExprObj.toString();
        LocalDateTime localDateTime = DateUtil.parseLocalDateTime(dateTimeExprObj.toString());
        if (localDateTime == null) {
            // Not meeting the format requirements
            return null;
        }
        boolean hasMicroSecond = dateTimeStr.indexOf('.') != -1;
        String formatStr = DateUtil.YEAR_TO_SECOND;
        // Support the second parameter
        if (timeExprParser != null) {
            Object timeExprObj = timeExprParser.parse(sourceData, rowIndex, context);
            if (timeExprObj != null) {
                String timeStr = timeExprObj.toString();
                LocalTime localTime = DateUtil.parseLocalTime(timeStr);
                if (localTime == null) {
                    // Not meeting the format requirements
                    return null;
                }
                hasMicroSecond |= timeStr.indexOf('.') != -1;
                localDateTime = DateUtil.dateAdd(localDateTime, localTime);
            } else {
                return null;
            }
        }
        if (hasMicroSecond) {
            formatStr = DateUtil.YEAR_TO_MICRO;
        }
        return localDateTime.format(DateUtil.getDateTimeFormatter(formatStr));
    }
TimestampFunction  -> timestamp(datetime_expr1[, datetime_expr2])
description:
- Return NULL if 'datetime_expr1' or 'datetime_expr2' is NULL;
- Return the date or datetime expression expr as a datetime value if there is only one parameter;
- Return the result of the date or date time expression 'datetime_expr1' plus the time expression 'datetime_expr2' if there are two parameters.
inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/function/temporal/TimestampFunction.java