2016-08-08 63 views
0

任何人都可以給我任何使用Spring Expression Languange(Spel)比較日期的例子嗎?如何使用Spring表達式語言比較日期?

我已經搜索了很多,我發現沒有什麼東西似乎適合我的目的。我使用的是Java 8,並且我有一個帶有ZonedDateTime字段的響應對象,我需要將它與YYYY-MM-DD-IE形式的字符串進行比較:在之前,之後,等於等。

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'"); 

以上顯然不起作用。任何人都可以給我看一個例子嗎?

回答

1

下面是使用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); 
    } 
} 
+0

這也正是我要找的!非常感謝! –

0

我會建議將你的字符串解析爲Instant或ZoneDateTime或任何TemporalAccessor,然後使用由TemporalAccessor擴展的接口ChronoZonedDateTime的方法compareTo()來比較兩個日期。 See javadoc for compareTo()。使用類java.time.format.DateTimeFormatter來解析String到TemporalAccessor。 (方法解析())。您的代碼可能如下所示:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
TemporalAccessor ta = dtf.parse(yourDateString); 
boolean result = yourZonedDateTime.compareTo(ta); 

這是一個開始的基礎。你也可以看到這篇文章解釋瞭如何將未知格式的字符串解析爲日期。這可能會有所幫助。

Java 8 java.time package: parsing any string to date

1

請嘗試這個爲例,我希望它會幫助你....

DateFormat destDf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date startDate; 
Date endDate; 
String strDate1="2016-08-09 00:00:00"; 
String strDate2="2015-11-19 00:00:00"; 
    startDate = destDf.parse(strDate1); 
    endDate = destDf.parse(strDate2); 
if(startDate.after(endDate)){ 
Object Date; 
if(startDate.before(endDate)) 
if(startDate.equals(endDate)) 

//You can check date in java like this also 
Date Date date = new Date(); 
if(date.getDate()==startDate.getDate() && date.getMonth()==startDate.getMonth() && date.getYear()==startDate.getYear()){ 
    System.out.println("Date1 is equal Date2"); 
}