java - 如何使用 Spring 表达式语言比较日期?

标签 java spring spring-el

任何人都可以给我一些如何使用 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/

相关文章:

java - Android JSON解析

java - 如果鼠标位于 jdatepicker 按钮上方,如何更改鼠标光标

java - Spring Boot GET 请求 API

java - Spring 应用程序错误: EL1008E

java - 混合表达式和文字的 SpEL 模板

Java JRadioButton

java - JSch:ByteArrayInputStream:如何检查最终结果

java - 服务器启动时在 Web 应用程序中获取服务器端口

java - 使用 Spring-Security 登录并重定向到所需 URL 时出现问题

java - 使用返回不同类型的 SpelExpressionParser 解析表达式的方法