2012-07-13 77 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