Based on the discussion converting string representation of unknown date-format to Date in java, I want to use the JavaScript Date
function in my App-Engine project. However, ScriptEngine does not work on App-Engine. So I need a little help converting to Rhino. Here is the ScriptEngine code I need to convert:
ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); ScriptEngine engine = scriptEngineManager.getEngineByName("JavaScript"); String script = "var date = new Date('" + dateInUnknownFormat + "'); var timestamp = date.getTime();"; engine.eval(script); long timestamp = ((Double) engine.get("timestamp")).longValue();
The following has not worked
private static long parseDateUsingRhino(String dateInUnknownFormat){ Context mozillaJsContext = Context.enter(); Scriptable scope = mozillaJsContext.initStandardObjects(); String script = "var date = new Date('" + dateInUnknownFormat + "'); var timestamp = date.getTime();"; Object obj = mozillaJsContext.evaluateString( scope, script, "TestScript", 1, null ); Double timeDouble = Double.parseDouble((String) obj); long timestamp = timeDouble.longValue(); return timestamp; }
and I have already replaced "TestScript"
with null
and ""
.
In the script that is executed by the JavaScript engine, you just need to calculate the value you want using new Date(dateString).getTime()
(you could also use "var date = new Date(dateString); date.getTime()";
). You should not store the result inside a variable.
I also made two additions to your method:
Context.toString(obj)
. Since here, the result is actually a number, we can use directly Context.toNumber(obj)
, which returns a double
, and cast it to long
.finally
block which exits from the Context
.Working code:
private static long parseDateUsingRhino(String dateInUnknownFormat) { Context mozillaJsContext = Context.enter(); try { Scriptable scope = mozillaJsContext.initStandardObjects(); String script = "new Date('" + dateInUnknownFormat + "').getTime()"; Object obj = mozillaJsContext.evaluateString(scope, script, "TestScript", 1, null); return (long) Context.toNumber(obj); } finally { Context.exit(); } }
Sample:
System.out.println(parseDateUsingRhino("2015-10-25T15:06:42.000Z")); // prints 1445785602000
Side note: this was tested with Rhino 1.7.7.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With