2016-08-24 1 views
8

जावा एप्लिकेशन के लिए सप्ताह उपयोगकर्ता संख्या अंतिम उपयोगकर्ता के लिए महत्वपूर्ण है। हालांकि, उसी तारीख और लोकेल के किसी कारण के लिए सप्ताह की संख्या मेरी मशीन और अंतिम उपयोगकर्ता के बीच भिन्न होती है।एक ही लोकेल विभिन्न मशीनों पर उसी तारीख के लिए अलग-अलग सप्ताह संख्या प्रदान करता है

हम दोनों को चलाने के लिए Windows 10 64 बिट और jre1.8.0_101

मैं इस समस्या को वर्णन करने के लिए एक छोटा सा कार्यक्रम बनाया, और यह दोनों मशीनों के बीच अलग-अलग परिणाम अर्जित करता है।

Calendar calUs = Calendar.getInstance(Locale.US); 
String usToday = "this week US: \t\t\t" + calUs.get(Calendar.WEEK_OF_YEAR) + " (should be 35 on 24-8-2016)"; 

Calendar calDe = Calendar.getInstance(Locale.GERMAN); 
String deToday = "this week DE: \t\t\t" + calDe.get(Calendar.WEEK_OF_YEAR) + " (should be 34 on 24-8-2016)"; 

Calendar calDef = Calendar.getInstance(); 
String defToday = "this week default default: \t" + calDef.get(Calendar.WEEK_OF_YEAR) 
     + " (should be 34 on 24-8-2016)"; 

System.out.println("Default locale: " + Locale.getDefault() + "\t(should be nl_NL)"); 
System.out.println(usToday); 
System.out.println(deToday); 
System.out.println(defToday); 

मेरी मशीन पर इस पैदावार:

डिफ़ॉल्ट स्थान: nl_NL (nl_NL होना चाहिए)

इस सप्ताह अमेरिका: 35

(24-8-2016 पर 35 होना चाहिए)

इस सप्ताह DE: 34 (24-8-2016 को 34 होना चाहिए)

इस सप्ताह डिफ़ॉल्ट डिफ़ॉल्ट: 34 (24-8-2016 को 34 होना चाहिए)

लेकिन अंत उपयोगकर्ता के लिए हम गलत परिणाम देखें:

डिफ़ॉल्ट स्थान: nl_NL (होना चाहिए nl_NL)

इस सप्ताह अमेरिका: 35 (35 24-8- पर होना चाहिए 2016)

इस सप्ताह डे: 35 (34 24-8-2016 पर होना चाहिए)

: 35 (24-8-2016 पर 34)

इस सप्ताह डिफ़ॉल्ट डिफ़ॉल्ट होना चाहिए

मैंने सफलतापूर्वक बिना किसी सफलता के इस मुद्दे को आजमाने और पुन: उत्पन्न करने के लिए विंडोज रजिस्ट्री में सप्ताह के पहले दिन और वर्ष के पहले सप्ताह को बदलने की कोशिश की है। एमएस आउटलुक में हमें दोनों मशीनों पर सही सप्ताह संख्या मिलती है। इससे मुझे विश्वास होता है कि समस्या किसी भी तरह जावा तक ही सीमित है।

मुझे यहां क्या याद आ रही है?

+2

मैं भी केस 1 देख रहा हूं। आप अन्य उपयोगकर्ता को कैलेंडर ऑब्जेक्ट का 'toString' करने दे सकते हैं। और देखें कि क्या आप उन में एक अंतर पा सकते हैं। –

+1

आप 'getMinimalDaysInFirstWeek()' और 'getFirstDayOfWeek()' का उपयोग करके उन कैलेंडर ऑब्जेक्ट्स से मेल खाते हैं (कोशिश करने के लिए और अधिक तरीके प्राप्त करने के बारे में सोचने का प्रयास करें)। मुझे नहीं पता, लेकिन मैं उम्मीद करता हूं कि जावा में आपके द्वारा प्रदान किए गए लोकेल के बजाय 'कैलेंडर' को ऑपरेटिंग सिस्टम की सेटिंग्स से चुनना होगा। –

+1

इस कोड को चलाने के समय (समय, तिथि नहीं) के आधार पर, 2 मशीनों को एक ही समय क्षेत्र में सेट करने के लिए उपयोगी हो सकता है। साथ ही, आप देख सकते हैं कि वर्ष के पहले सप्ताह में 2 मामलों के लिए क्या निर्धारित किया गया है। –

उत्तर

1

मैंने अपने सहयोगी की मशीन पर अभी अपना जोडा टाइम टेस्ट प्रोग्राम चेक किया है, जो इसे करना चाहिए। ऐसा लगता है कि हम उस लाइब्रेरी का उपयोग करने के लिए मुख्य कार्यक्रम को बदलने की दिशा में काम करेंगे (और संभवतः जावा 8 पर जाने के बाद समय पर स्विच करें)

मैं सुझाव देता हूं कि कैलेंडर क्लास को सहकार करने में बहुत अधिक समय न दें जावा में सप्ताह की संख्या।

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