diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/TimePlaceholderUtils.java b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/TimePlaceholderUtils.java index 24bb79187073..6c17af83d9b1 100644 --- a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/TimePlaceholderUtils.java +++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parser/TimePlaceholderUtils.java @@ -18,8 +18,6 @@ package org.apache.dolphinscheduler.plugin.task.api.parser; import static org.apache.commons.lang3.time.DateUtils.addWeeks; -import static org.apache.dolphinscheduler.common.utils.DateUtils.addDays; -import static org.apache.dolphinscheduler.common.utils.DateUtils.addMinutes; import static org.apache.dolphinscheduler.common.utils.DateUtils.addMonths; import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.ADD_CHAR; import static org.apache.dolphinscheduler.plugin.task.api.TaskConstants.ADD_MONTHS; @@ -55,6 +53,8 @@ import org.apache.commons.lang3.StringUtils; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.AbstractMap; import java.util.ArrayList; import java.util.Calendar; @@ -528,7 +528,7 @@ public static Map.Entry calcCustomDay(String expression, String ke break; case THIS_DAY: dataFormat = expression.substring(THIS_DAY.length() + 1, expression.length() - 1); - targetDate = addDays(date, 0); + targetDate = date; break; case LAST_DAY: dataFormat = expression.substring(LAST_DAY.length() + 1, expression.length() - 1); @@ -649,9 +649,21 @@ public static Map.Entry calcMinutes(String expression, Date date) if (expression.contains("+")) { int index = expression.lastIndexOf('+'); - if (Character.isDigit(expression.charAt(index + 1))) { - String addMinuteExpr = expression.substring(index + 1); - Date targetDate = addMinutes(date, calcMinutes(addMinuteExpr)); + if (index + 1 < expression.length() && Character.isDigit(expression.charAt(index + 1))) { + String addDayExpr = expression.substring(index + 1); + int days; + try { + days = Integer.parseInt(addDayExpr); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Invalid minute expression: " + expression, e); + } + LocalDate localDate = date.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate() + .plusDays(days); + + Date targetDate = Date.from( + localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); String dateFormat = expression.substring(0, index); return new AbstractMap.SimpleImmutableEntry<>(targetDate, dateFormat); @@ -659,9 +671,21 @@ public static Map.Entry calcMinutes(String expression, Date date) } else if (expression.contains("-")) { int index = expression.lastIndexOf('-'); - if (Character.isDigit(expression.charAt(index + 1))) { - String addMinuteExpr = expression.substring(index + 1); - Date targetDate = addMinutes(date, 0 - calcMinutes(addMinuteExpr)); + if (index + 1 < expression.length() && Character.isDigit(expression.charAt(index + 1))) { + String addDayExpr = expression.substring(index + 1); + int days; + try { + days = Integer.parseInt(addDayExpr); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Invalid minute expression: " + expression, e); + } + LocalDate localDate = date.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate() + .minusDays(days); + + Date targetDate = Date.from( + localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); String dateFormat = expression.substring(0, index); return new AbstractMap.SimpleImmutableEntry<>(targetDate, dateFormat);