में SimpleDateFormat व्यवहार परिवर्तन I Android 6.0, Marshmallow पर दिनांक स्वरूपण के साथ मुझे कोई समस्या आई है। नीचे उल्लिखित अपवाद फेंकने वाला कोड एक शुद्ध-जावा लाइब्रेरी है (अलग से बनाया गया) जो मेरा एप्लिकेशन API अनुरोधों ("क्लाइंट") के लिए उपयोग करता है। पुस्तकालय जावा 1.6 के साथ बनाया गया है यदि यह संबंधित है ... वैसे भी, कोड है;एंड्रॉइड मार्शमलो
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd E hh:mm aa", Locale.UK);
Date eventDate = dateFormat.parse(StringUtils.substring(record, 0, 23).trim());
... record
मूल्य है;
2015-10-23 Fri 10:59 PM BST 3.60 meters
... जो "ट्रिमिंग" के बाद है;
2015-10-23 Fri 10:59 PM
yyyy-MM-dd E hh:mm aa
यह कोड फ्रायओ के अच्छे पुराने दिनों से काम करता है और यूनिट-परीक्षण है। मार्शमलो के अलावा सभी अपवाद फेंकता है;
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: SynchroniseTidePosition.doInBackground
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: java.text.ParseException: Unparseable date: "2015-10-23 Fri 10:59 PM" (at offset 21)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at java.text.DateFormat.parse(DateFormat.java:579)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at com.oceanlife.rover.handler.XTideParser.parseResponse(XTideParser.java:69)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at com.brantapps.oceanlife.task.SynchroniseTidePosition.doInBackground(SynchroniseTidePosition.java:107)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at com.brantapps.oceanlife.task.SynchroniseTidePosition.doInBackground(SynchroniseTidePosition.java:43)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at android.os.AsyncTask$2.call(AsyncTask.java:295)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
10-23 21:01:56.816 4091-4110/com.oceanlife E/ParseException: at java.lang.Thread.run(Thread.java:818)
ऑफसेट "21" 10:59 में '9' के बाद की जगह है। क्या कोई इस विफलता को समझा सकता है?
अद्यतन
Joda समय पर स्विच और इसे बाहर थूक एक अधिक सूचनात्मक त्रुटि संदेश। यह रहा;
Invalid format ... is malformed at "PM"
... हां, तो इस स्ट्रिंग की कोशिश कर के AM/PM पहलू पार्स किया जा सकता के बारे में है - the docs
अंधेरे में गोली मार दी: क्या आप पुष्टि कर सकते हैं कि आपके तार कुछ यूटीएफ -8/यूटीएफ -16 एन्कोडिंग में नहीं हैं। –
हाय @ मॉरिसन चांग - स्ट्रिंग्स को तारसेट के साथ पार्स किया जाता है; Charset.forName ("यूटीएफ -8") क्या सोच रहा है? – OceanLife
क्षमा करें बस विचारों को फेंक दें। इसे मिला: http://stackoverflow.com/questions/24399846/android-simpledateformat-parsing-error (लेकिन पूर्व इकाई परीक्षण सफलता की व्याख्या नहीं करेगा) और यह: https://code.google.com/p/android/मुद्दों/विस्तार? id = 158,265। यदि ऐसा है तो क्षमा करने की तुलना में फिर से अधिक शोर हो सकता है। –