Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -528,7 +528,7 @@ public static Map.Entry<Date, String> 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);
Expand Down Expand Up @@ -649,19 +649,43 @@ public static Map.Entry<Date, String> 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);
}
} 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);
Expand Down
Loading