We have migrated from jdk8 to jdk17, and had to use graalvm js instead of nashorn js. We found, that graalvm js interprets java.util.Date as long not as a Date. Here are 2 examples.
Using jdk8 (nashorn):
public static void main(String[] args) {
Map<String, Object> parameters = new HashMap<>();
Date activationDate = DATE_FORMAT.parse("04/30/2008 00:00:00");
parameters.put("aActivationDate", activationDate);
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.putAll(parameters);
engine.eval("print(aActivationDate)", bindings);
}
The result of this code is: Wed Apr 30 00:00:00 EDT 2008
Using jdk17 with graalvm js.
public static void main(String[] args) {
Map<String, Object> parameters = new HashMap<>();
Date activationDate = DATE_FORMAT.parse("04/30/2008 00:00:00");
parameters.put("aActivationDate", activationDate);
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("polyglot.js.nashorn-compat", true);
bindings.putAll(parameters);
engine.eval("print(aActivationDate)", bindings);
}
The result of this code is: 1209528000000
What should be done so, that graalvm interprets java.util.Date in the same way as nashorn js? Thank you.