2015-10-17 8 views
22

में जावास्क्रिप्ट कोड चर्चा converting string representation of unknown date-format to Date in java के आधार पर चलाने के लिए, मैं अपने ऐप-इंजन परियोजना में जावास्क्रिप्ट Date फ़ंक्शन का उपयोग करना चाहते हैं। हालांकि, स्क्रिप्टइंजिन ऐप-इंजन पर काम नहीं करता है। तो मुझे राइनो में परिवर्तित करने में थोड़ी मदद की ज़रूरत है।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(); 

निम्नलिखित

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; 
} 

काम नहीं किया है और मैं पहले से ही null और "" साथ "TestScript" जगह ले ली है: यहाँ ScriptEngine कोड मैं बदलने की आवश्यकता है।

+0

क्या आप त्रुटि ट्रेस जोड़ना भूल गए थे? – Filip

+1

नहीं। मैंने इसे बाहर निकाला क्योंकि यह अप्रासंगिक था। मुझे नहीं पता कि कोड को सही तरीके से कैसे लिखना है। अपरिहार्यता यह है कि मुझे जो भी कोशिश है, उसके आधार पर मुझे अलग-अलग त्रुटियां या कोई त्रुटि नहीं मिलती है। लेकिन अंत में, मैं परिणाम उत्पन्न करने के लिए राइनो कभी नहीं प्राप्त कर सकता। स्पष्ट रूप से कोई जो जानता है कि राइनो कैसे काम करता है, स्क्रिप्टइंजिन संस्करण को राइनो में अनुवाद करने में कोई समस्या नहीं होगी। – learner

उत्तर

0

आप इसे पहली बार इस तरह का प्रयास करना चाहिए और देखो अगर यह काम करता है:

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)); 
    } 

और this के अनुसार सब आप आगे क्या करना है की जरूरत है ताकि तरह, कोई जावा स्ट्रिंग संयोजन की आवश्यकता है (संदर्भ dateInUnknownFormat चर पारित बहुत चालाक शायद जावास्क्रिप्ट दायरे में वैश्विक चर के रूप जावा विधि के सुलभ चर पर विचार करने के लिए) है:

String script = "var date = new Date(dateInUnknownFormat).getTime();";

+0

मुझे एक ही समस्या है और इसलिए मैं आपके समाधान को लागू करने का प्रयास करता हूं और मुझे 'java.lang.NumberFormatException: इनपुट स्ट्रिंग के लिए: "अपरिभाषित" 'मिलता है। और यह आपके सटीक कोड ब्लॉक के साथ है जिसमें "var date = new date()। GetTime();" ' –

+0

क्या आपने पोस्ट करने से पहले इस कोड का परीक्षण किया था? यह काम नहीं करता। – learner

1

स्क्रिप्ट वें द्वारा निष्पादित किया जाता है ई जावास्क्रिप्ट इंजन, आपको केवल उस मूल्य की गणना करने की आवश्यकता है जिसे आप new Date(dateString).getTime() का उपयोग करना चाहते हैं (आप "var date = new Date(dateString); date.getTime()"; का भी उपयोग कर सकते हैं)। आपको परिणाम को एक चर के अंदर स्टोर नहीं करना चाहिए।

  • एक स्ट्रिंग के लिए मूल्यांकन का परिणाम बदलने के लिए, आप Context.toString(obj) उपयोग करना चाहिए:

    मैं भी अपने विधि के लिए दो अतिरिक्त बनाया है। यहां से, परिणाम वास्तव में एक संख्या है, हम सीधे Context.toNumber(obj) का उपयोग कर सकते हैं, जो double देता है, और इसे long पर कास्ट करता है।

  • मैंने finally ब्लॉक जोड़ा जो Context से निकलता है।

कार्य कोड:

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(); 
    } 
} 

नमूना:

System.out.println(parseDateUsingRhino("2015-10-25T15:06:42.000Z")); // prints 1445785602000 

साइड ध्यान दें: इस राइनो 1.7.7 के साथ परीक्षण किया गया था।

संबंधित मुद्दे