Javascript java 8 Nashorn引擎无法比较日期
我想用Java8Nashorn引擎比较两个日期。但是,它没有正确地比较日期 我的Java代码:Javascript java 8 Nashorn引擎无法比较日期,javascript,java,date,java-8,nashorn,Javascript,Java,Date,Java 8,Nashorn,我想用Java8Nashorn引擎比较两个日期。但是,它没有正确地比较日期 我的Java代码: Date start = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 1); Date end = cal.getTime(); engine.put("start", start); // engine is ScriptEngine engine.put("end", end); as
Date start = new Date();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date end = cal.getTime();
engine.put("start", start); // engine is ScriptEngine
engine.put("end", end);
assertTrue((boolean)engine.eval("start < end")); //This assert is failing
//if I change dates to long it is working
engine.put("start", start.getTime());
engine.put("end", end.getTime());
assertTrue((boolean)engine.eval("start < end")); //This will now work
日期开始=新日期();
Calendar cal=Calendar.getInstance();
计算添加(日历日期,1);
Date end=cal.getTime();
发动机。放置(“启动”,启动);//引擎是脚本引擎
引擎。放置(“结束”,结束);
assertTrue((布尔)engine.eval(“开始<结束”)//这个断言失败了
//如果我将日期改为long,它就会起作用
engine.put(“start”,start.getTime());
engine.put(“end”,end.getTime());
assertTrue((布尔)engine.eval(“开始<结束”)//现在这就行了
但是,由于其他一些要求,我不想将date转换为long。请指出我犯错误的地方
感谢Nashnorn中的,并生成完全不同的对象。这是有道理的,因为两个对象的功能差别很大。Nashorn在内部使用jdk.Nashorn.internal.objects.NativeDate
后者是原生JS,可以安全地与
进行比较。对于前者,比较将纯粹通过内存中的地址进行
为了使用更少和更多的操作符,我建议在填充引擎的全局上下文时将Java日期转换为NativeDate
一种可能的方法是
Date start = new Date();
ScriptObjectMirror jsDate = (ScriptObjectMirror) engine.eval("new Date();")
jsDate.callMember("setTime",start.getTime());
engine.put("start", jsDate);
engine.eval("print(start.constructor + ':' + start)");
打印“函数日期(){[本机代码]}:2016年7月23日星期六19:05:53 GMT-0400(EDT)”
然而
engine.put("javaStart", new Date());
engine.eval("print(javaStart.constructor + ':' + javaStart)");
打印“未定义:2016年7月23日星期六19:05:53 EDT”