任何人都可以给我一些如何使用 Spring Expression Languge (Spel) 比较日期的示例吗?
我进行了广泛的搜索,但似乎没有找到符合我目的的东西。我使用的是 Java 8,我有一个带有 ZonedDateTime 字段的响应对象,我需要将其与 YYYY-MM-DD 形式的字符串进行比较 - 即:在之前、在之后、等于等。
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.systemDefault());
HashMap<String, Object> testHash = new HashMap<>();
testHash.put("dateField", zonedDateTime);
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariables(testHash);
Expression expression = parser.parseExpression("#dateField > '2016-01-01'");
上面的显然是行不通的。有人能给我举个例子吗?
最佳答案
下面是使用 Java 8 java.time 包和 Spring 表达式语言进行日期比较的代码。希望这会有所帮助。
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import org.junit.Test;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import junit.framework.Assert;
public class TestDateSPEL {
@Test
public void testCompareDate() throws Exception {
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.systemDefault());
String otherDate = "2010-12-25 12:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").withZone(ZoneId.systemDefault());
ZonedDateTime zdtOtherDate = ZonedDateTime.parse(otherDate, formatter);
//SpEL Context
EvaluationContext context = new StandardEvaluationContext(new ZonedDateTimeUtil());
context.setVariable("dateOne", zonedDateTime);
context.setVariable("dateTwo", zdtOtherDate);
//SpEL Parser
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("compareDate(#dateOne, #dateTwo)");
int value = (Integer) exp.getValue(context);
//"zonedDateTime" is after "zdtOtherDate"
Assert.assertEquals(1, value);
}
}
class ZonedDateTimeUtil {
public int compareDate(ZonedDateTime dateOne, ZonedDateTime dateTwo){
return dateOne.compareTo(dateTwo);
}
}
关于java - 如何使用 Spring 表达式语言比较日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38833303/