lea*_*ner 22 javascript java google-app-engine rhino scriptengine
基于讨论将未知日期格式的字符串表示转换为Java中的Date,我想Date在我的App-Engine项目中使用JavaScript 函数.但是,ScriptEngine不适用于App-Engine.所以我需要一点帮助才能转换成Rhino.这是我需要转换的ScriptEngine代码:
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();
Run Code Online (Sandbox Code Playgroud)
以下没有奏效
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;
}
Run Code Online (Sandbox Code Playgroud)
我已经"TestScript"用null和替换了"".
你应该先像这样尝试一下,看看它是否有效:
private static long parseDateUsingRhino(String dateInUnknownFormat){
Context mozillaJsContext = Context.enter();
Scriptable scope = mozillaJsContext.initStandardObjects();
String script = "var date = new Date().getTime();";
Object result = mozillaJsContext.evaluateString( scope, script, "", 1, null );
return Long.valueOf(Context.toString(result));
}
Run Code Online (Sandbox Code Playgroud)
根据这个,接下来你需要做的dateInUnknownFormat就是像这样传递变量,不需要java字符串连接(上下文足够聪明,可能会将java方法的可访问变量视为javascript范围中的全局变量):
String script = "var date = new Date(dateInUnknownFormat).getTime();";