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