आप release notes for Nougat को देखें, तो आप देख सकते हैं कि वहाँ स्थानों के लिए समर्थन बढ़ जाता है।
विशेष रूप से,
एंड्रॉयड 7.0 करने से पहले, एंड्रॉयड हमेशा एप्लिकेशन को सफलतापूर्वक और सिस्टम स्थानों से मेल खा सकते।
मैंने भी इसे अपने डिवाइस पर देखा है। मेरा फोन अंग्रेजी (ऑस्ट्रेलिया) लोकेल के साथ सेट है। नूगा करने से पहले,
DateTimeFormat.forPattern("dd MMMM").print(new LocalDate(2017,1,29));
29 Jan
(कोई पूर्ण रोक/अवधि) मुद्रित होगा, लेकिन नूगा के बाद यह 29 Jan.
प्रिंट (अवधि) के साथ।
हालांकि मेरे लिए सटीक विनिर्देश देना मुश्किल है, ऐसा लगता है कि यह आपके मामले में क्या हो रहा है। पोस्ट-नौगेट, फोन आपके लोकेल के लिए सप्ताह के पहले दिन सहित ऐप और सिस्टम लोकेशंस से बेहतर मिलान करने में सक्षम है। किसी भी मामले में, रूट कारण खोजने के लिए डीबगर के साथ कदम उठाने से काम नहीं होगा क्योंकि कॉल को स्रोत कोड में प्रकट जावा क्लास के बजाए libcore
के अंदर संभाला जाता है।
एक Android डिवाइस गलत रूप से वर्ष के पहले दिन इस वर्ष के/प्रथम सप्ताह रिपोर्ट कर रहा है, तो वहाँ थोड़ा आप इसे चारों ओर कार्य के अलावा क्या कर सकते हैं होगा:
if (android.os.Build.VERSION.SDK_INT < 24) {
//pre-Nougat logic
}
else {
//Nougat/post-Nougat logic
}
तुम भी शायद enhanced replacement for GregorianCalendar उपयोग करने का प्रयास कर सकता है (आपकी समस्या को ठीक करने के लिए एसडीके 24 में जोड़ा गया)।
यदि आप Joda-time जैसे वर्गों का उपयोग करते हैं या नए JSR-310 कक्षाओं (थ्रीटेन बैकपोर्ट के माध्यम से) का उपयोग करते हैं तो आप GregorianCalendar
के आसपास काम करने के बिना जो भी चाहते हैं उसे पाने में सक्षम हो सकते हैं। आम तौर पर इन वर्गों का उपयोग करना बहुत आसान होता है और कम बग-प्रवण होता है। इस तरह के मुद्दों के कारण कई डेवलपर्स पहले ही java.util.Calendar
और java.util.Date
पर छोड़ चुके हैं। कृपया विवरण के
आप Joda उपयोग करने के लिए थे, तो आप LocalDate.fromCalendarFields(test)
उपयोग कर सकते हैं एक LocalDate
में अपने GregorianCalendar
वस्तु कन्वर्ट करने के लिए उत्तर to this canonical question देखते हैं। ये कक्षाएं आईएसओ मानक का उपयोग करती हैं जहां सप्ताह का पहला दिन हमेशा सोमवार होता है। फिर आप उन तर्कों को लिखेंगे जिन्हें आप चाहते हैं। फिर GregorianCalendar
के साथ समस्या किसी दिए गए लोकेल के लिए वर्ष के पहले सप्ताह को पुनः प्राप्त करने के साथ ही एकमात्र समस्या में "पृथक" होगी। यदि आपका ऐप किसी सर्वर पर कॉल शामिल करता है, तो आप इसके बजाय एपीआई कॉल से सप्ताह के पहले दिन की सेवा कर सकते हैं।
अद्यतन:
नोट समय क्षेत्र व्यवहार Android O में अद्यतन किया गया है:
समय क्षेत्र नाम की पार्सिंग बदल गया है: इस प्रकार
अतिरिक्त स्थान और अंतर्राष्ट्रीयकरण से संबंधित बदलता है। पहले, एंड्रॉइड डिवाइस ने बूट समय पर नमूना सिस्टम घड़ी मान का उपयोग किया था ताकि समय क्षेत्र को पार्स करने के लिए उपयोग किए जाने वाले समय क्षेत्र नामों को कैश किया जा सके। नतीजतन, बूट समय पर या अन्य में दुर्लभ मामलों में सिस्टम घड़ी गलत होने पर पार्सिंग को नकारात्मक रूप से प्रभावित किया जा सकता है। अब, सामान्य मामलों में पार्सिंग तर्क समय क्षेत्र नामों को पार्स करते समय आईसीयू और वर्तमान सिस्टम घड़ी मान का उपयोग करता है। यह परिवर्तन अधिक सही परिणाम प्रदान करता है, जो आपके एंड्रॉइड संस्करणों से अलग हो सकता है जब आपका ऐप SimpleDateFormat जैसे वर्गों का उपयोग करता है। एंड्रॉइड ओ संस्करण 58 के लिए आईसीयू के संस्करण को अपडेट करता है।
स्पष्टीकरण के लिए धन्यवाद। मुझे नहीं लगता कि मेरा जवाब अब आपके लिए उपयोगी होगा क्योंकि समस्या की दिशा में सामान्य नोड के अलावा (नौगेट मिलान करने वाला ऐप और सिस्टम लोकेल)। बेहतर उत्तरों को आकर्षित करने के लिए, शायद आप कुछ और स्पष्ट कर सकते हैं। बस समस्या को दोहराने के लिए अपने नमूना कोड में लोकेल सेट कर रहा है या क्या आप अपने ऐप के अंदर कुछ करना चाहते हैं? –
वैसे भी धन्यवाद। लोकेल बस समस्या को दोहराने के लिए है। –