2016-08-08 25 views
0

Kann mir jemand Beispiele geben, wie man Datumsangaben mit Spring Expression Languange (Spel) vergleicht?Wie vergleicht man Datumsangaben mit Spring Expression Language?

Ich habe weit und breit gesucht und nichts, was ich finde, scheint zu meinem Zweck zu passen. Ich verwende Java 8 und ich habe ein Response-Objekt mit einem Feld "ZonedDateTime", das ich irgendwie mit einem String in Form von YYYY-MM-DD vergleichen muss - IE: ist vor, ist nach, ist gleich usw.

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

Das oben genannte funktioniert offensichtlich nicht. Kann mir jemand ein Beispiel zeigen?

Antwort

1

Unten finden Sie den Code für Datum Vergleich Java unter Verwendung von 8 java.time Paket und Spring Expression Language. Hoffe das hilft.

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

Das ist genau das, was ich suche! Danke vielmals! –

0

Ich würde empfehlen, Ihre Zeichenfolge zu Instant oder ZoneDateTime oder einem beliebigen TemporalAccessor analysieren und dann Methode compareTo() der Schnittstelle ChronoZonedDateTime verwenden, die von TemporalAccessor erweitert wird, um zwei Daten zu vergleichen. See javadoc for compareTo(). Verwenden Sie die Klasse , um einen String zu TemporalAccessor zu analysieren. (Methode parse()). Ihr Code sieht möglicherweise so aus:

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

Das ist eine Basis, um mit zu beginnen. In diesem Artikel wird außerdem erläutert, wie eine Zeichenfolge mit unbekanntem Format analysiert wird. Es könnte hilfreich sein.

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

1

Bitte versuchen Sie dies als Beispiel ich, dass es hoffen, dass Sie helfen ....

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"); 
} 
Verwandte Themen