2012-07-13 55 views
0

我正在使用Javascript引擎來比較值。值可以是雙精度或日期。 (字符串)使用JavaScript引擎比較日期

ScriptEngineManager factory = new ScriptEngineManager(); 
ScriptEngine engine = factory.getEngineByName("JavaScript"); 
// Date value is populated dynamically here 
engine.eval("dateValue = " + "01/02/2012"); 
// The condition is populated dynamically here 
if ((Boolean) engine.eval("dateValue <=" + "12/31/2012")) { 
    System.out.println("TRUE"); 
} else { 
    System.out.println("FALSE"); 
} 

上面的代碼可以很好地處理double值,但會給日期帶來錯誤的結果。對於上面的例子,它應該顯示TRUE,但是它顯示FALSE。請幫忙。

回答

1

你應該這樣做:

engine.eval("var dateValue = " + "new Date(2012, 02, 01);"); 
... 
if ((Boolean) "dateValue <=" + " new Date(2012, 12, 31);") 

在腳本2012年12月31日將被解釋爲一個數學表達式。

另一種可能性爲你想要做的測試是一樣的東西:

engine.eval("var test = dateValue <=" + " new Date(2012, 12, 31);") 
Object myBoolean = engine.get("test"); 
+0

感謝您的答覆。我試過這個,但它在線程「main」中拋出異常異常com.sun.phobos.script.util.ExtendedScriptException:org.mozilla.javascript.EvaluatorException:missing;在行號1 – 2012-07-13 19:37:42

+0

之前的語句(<未知源>#1)嘗試在if腳本末尾處的';'現在更新 – 2012-07-13 19:39:59

+0

否則,您可以將此值賦給變量並獲取通過引擎對象的變量。 – 2012-07-13 19:40:36