2009-09-07 13 views
10

मैं किसी उपयोगकर्ता के लिए टाइमज़ोन प्राप्त करने का प्रयास कर रहा हूं।क्या समय क्षेत्र (केवल) देश कोड (वैध आईएसओ -3166 कोड) के साथ एक समय पाने का कोई तरीका है?

इसके लिए मेरे पास एक देश कोड है जो वैध आईएसओ देश कोड है। ये कोड ऊपरी-मामले हैं, आईएसओ -3166 द्वारा परिभाषित दो अक्षर कोड। आप इस तरह के रूप में साइटों, के एक नंबर पर इन कोड की एक पूरी सूची पा सकते हैं: http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html

मुझे लगता है कि प्रतिक्रिया "है कोई, क्योंकि यह एक manytomany संबंध है ... वहाँ संयुक्त राज्य अमेरिका जैसे देश के लिए कई क्षेत्रों के बीच व्याप्त हो सकता है। .. "। यही समस्या है ...

मैं की तरह कुछ tryied है:

//CountryEnum contains ISO_3166 values (http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html) 
    //List all country to test timezone: 
    for (int i = 0; i < CountryEnum.values().length; i++) { 
    String isoCountryCode = CountryEnum.values()[i].name();// Get the iso country code 
    Locale locale = new Locale(isoCountryCode);// Build a country specific locale 
    Calendar calendar = Calendar.getInstance(locale);// Build a calendar with the specific locale 
    String timeZone = calendar.getTimeZone().getDisplayName();// Build a timeZone with the calendar 
    System.out.println("LOCALE : "+locale+"/COUNTRY: "+isoCountryCode+"/TIMEZONE: "+timeZone); 
    } 

लेकिन यह हमेशा सर्वर समयक्षेत्र लौट ...

कोई भी विचार?

उत्तर

3

आप बिल्कुल सही हैं। वहां यूएस - या रूस, या कई अन्य "बड़े" देशों (पूर्व/पश्चिम के संदर्भ में) के लिए कोई भी समय क्षेत्र नहीं है।

अमेरिका निश्चित रूप से एक साधारण उदाहरण है - आप किस समय क्षेत्र का उपयोग करना चाहते हैं? America/Los_Angeles? America/New_York? कुछ और?

+1

दिलचस्प है , एक ही समय क्षेत्र पर अन्य बड़े देश हैं; भारत और चीन दोनों इस श्रेणी में आते हैं। भारत आम तौर पर दो समय क्षेत्रों को कवर करेगा; चीन 4 समय क्षेत्रों को कवर करेगा। –

+2

हाँ - कुछ देशों में जब यह समय क्षेत्रों :) –

+1

विवेक की बात आती है समझदार होने के लिए चुना है - हाँ; एक तरह का लेकिन चीन में, अगर पूर्वी तट पर सुबह 5 बजे सूरज उगता है, तो गोबी रेगिस्तान के पश्चिमी किनारे पर सुबह 8 बजे तक नहीं बढ़ता है। और यदि यह पूर्वी तट पर 7 बजे सेट होता है, तो यह पश्चिम में 10 बजे तक सेट नहीं होता है। –

0

मुझे ऐसा कुछ भी पता नहीं है जो आपको यह देता है (जैसा कि जॉन ने उपयोग के मामले को इंगित किया है) लेकिन आप this data का उपयोग करके मानचित्र बना सकते हैं। सूची एक बहु-मानचित्र होगी, इसलिए शायद आप इसे Google संग्रह से उपयोग करेंगे, या अपने स्वयं के आईएसओ-कोड-> सूची <String> मानचित्र का उपयोग करें।

समय क्षेत्र स्ट्रिंग को देखते हुए, आप टाइमज़ोन ऑब्जेक्ट बना सकते हैं और वहां से जा सकते हैं। हालांकि, अगर देश में एक से अधिक समय क्षेत्र है, तो आपको यह तय करना होगा कि इसे कैसे संभालना है।

+0

बिल्कुल, यह मेरे लिए सबसे अच्छा समाधान है। मुझे लगता है कि मैं शायद देश के साथ समय क्षेत्र को मैप कर दूंगा, ताकि देश द्वारा एक अद्वितीय समय क्षेत्र हो सके। – ajeanson

6

LocaleTimeZone नहीं है, और इसके विपरीत। जिस विधि का आप उपयोग कर रहे हैं उसके लिए Javadoc देखें - पहली पंक्ति कहती है

डिफ़ॉल्ट समय क्षेत्र और निर्दिष्ट लोकेल का उपयोग करके कैलेंडर प्राप्त करता है।

यही कारण है कि आपको डिफ़ॉल्ट टाइमज़ोन मिल रहा है - क्योंकि आपने कैलेंडर प्राप्त करते समय एक निर्दिष्ट नहीं किया है।

के बारे में क्या जॉन ने कहा कि लगता है कि - अगर आप क्या समय क्षेत्र पता है कि तुम स्थिति है जहाँ आप एक उपयोगकर्ता बाहर काम किया है है अमेरिका से है, तो आप Calendar.getInstance विधि है कि एक समय क्षेत्र लेता कॉल कर सकते हैं में उपयोग करना चाहते हैं और एक लोकेल दूसरी तरफ, यदि आप निश्चित रूप से यह नहीं कह सकते कि आप यहां क्या करेंगे, तो अपने कार्यान्वयन को देखने के बजाय ड्राइंग बोर्ड पर वापस जाएं और अपनी आवश्यकताओं के बारे में कुछ और सोचें।

यदि आप पिछले प्रश्न का उत्तर नहीं दे सकते हैं, तो मुझे लगता है कि अधिकांश वेबसाइटों का मानक सहारा उपयोगकर्ताओं को अपना पसंदीदा टाइमज़ोन निर्दिष्ट करने की अनुमति देना है (यदि उनके पास सर्वर पर लगातार खाता है) और उन्हें सर्वर के टाइमज़ोन पर डिफ़ॉल्ट करें उन्होंने अन्यथा नहीं कहा है। यदि उनके पास लगातार खाते नहीं हैं, और वे आपको समय-समय पर जानकारी प्रदान कर रहे हैं (उदाहरण के लिए एक एक्सएमएल अपलोड), तो उन्हें या तो निर्दिष्ट करना होगा कि वे अनुरोध में किस समय क्षेत्र का उपयोग कर रहे हैं, या (शायद बेहतर) आप हर समय यूटीसी के उपयोग को जनादेश देते हैं।

+0

न केवल कि, लेकिन एकल आर्ग 'Locale' निर्माता भाषा, नहीं देश निर्दिष्ट करता है। – akf

-2

ओल्सन डेटाबेस सभी मैपिंग शामिल हैं। zone.tab फ़ाइल के लिए Link

खोजें।

4

आप इस के लिए ICU4J उपयोग कर सकते हैं ... http://helpdesk.objects.com.au/java/can-i-find-all-available-timezones-for-a-country

+1

यह आसान है, लेकिन लौटाई गई सूची नाम से वर्णानुक्रम में दिखाई देती है; यह एक शर्म की बात है आईसीयू 4 जे प्रदर्शन उद्देश्यों के लिए "देश कोड के लिए कम से कम आश्चर्यजनक टाइमज़ोन" प्राप्त करने का कोई तरीका नहीं प्रदान करता है; सबसे अधिक संभावना यह राजधानी की होगी। –

-2

देखें आप TZInfo मणि की कोशिश की?

आप एक देश के समय क्षेत्र इस तरह से प्राप्त कर सकते हैं:

>> TZInfo::Country.get("DE").zone_identifiers 
=> ["Europe/Berlin", "Europe/Busingen"] 
>> TZInfo::Country.get("CN").zone_identifiers 
=> ["Asia/Shanghai", "Asia/Harbin", "Asia/Chongqing", "Asia/Urumqi", "Asia/Kashgar"] 
>> TZInfo::Country.get("US").zone_identifiers 
=> ["America/New_York", "America/Detroit", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Indiana/Indianapolis", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Vevay", "America/Chicago", "America/Indiana/Tell_City", "America/Indiana/Knox", "America/Menominee", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/North_Dakota/Beulah", "America/Denver", "America/Boise", "America/Phoenix", "America/Los_Angeles", "America/Anchorage", "America/Juneau", "America/Sitka", "America/Yakutat", "America/Nome", "America/Adak", "America/Metlakatla", "Pacific/Honolulu"] 
+0

यह एक जावा सवाल –

-1

यहाँ समाधान है जो आप देख रहे हैं:

public String getTimeZoneByLocale(final String languageTag){ 
    final Locale locale = Locale.forLanguageTag(languageTag); 
    final Calendar cal = Calendar.getInstance(locale); 
    final TimeZone timeZone = cal.getTimeZone(); 
    return timeZone.getID(); 
} 

languageTag en_US या ru_ru की तरह कोड

+0

नहीं, यह ') वापस आ जाएगी TimeZone.getDefault (' है –

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