मेरा मानना है कि ऐसा इसलिए है क्योंकि जावा संस्करण के बावजूद सभी संभावित टाइमज़ोन नामों की सूची बदल सकती है।
टाइमज़ोन जानकारी comes with Java installation (आमतौर पर फ़ोल्डर <java-home>/lib/zi
, या jre/lib/tzdb.dat
फ़ाइल में नए संस्करणों में)। लेकिन यह जानकारी जावा संस्करण (Timezone Updater Tool का उपयोग करके) को बदले बिना अपडेट किया जा सकता है।
यदि टाइमज़ोन डेटा अपडेट किया गया है (लेकिन जावा संस्करण समान रहता है) और एक नई जोन आईडी बनाई गई है, तो इसके लिए एपीआई "अधूरा" छोड़कर Enum
के बराबर नहीं होगा। और टाइमज़ोन डेटा changes faster than JDK updates - यहां तक कि अगर ऐसा नहीं होता है, तो जैसे ही हम चाहें उत्पादन वातावरण में जेडीके संस्करण को अपडेट करना हमेशा संभव नहीं होता है।
मैं एपीआई रचनाकारों के लिए बात नहीं कर सकता, लेकिन मुझे लगता है कि उन्होंने इसे छोड़ने का फैसला किया है क्योंकि नामस्थान जेडीके की तुलना में तेज़ी से बढ़ सकता है, और अद्यतित एनमम्स को बनाए रखना एक होगा अंतहीन और हमेशा अपूर्ण नौकरी।
तुम सच में अगर एक समय क्षेत्र का नाम मान्य है की जांच करना चाहते हैं, तो आप कर सकते हैं:
if (ZoneId.getAvailableZoneIds().contains("America/Sao_Paulo")) {
// America/Sao_Paulo is a valid ID
}
या बस ZoneId.of("zone-name")
फोन और ZoneRulesException
पकड़ने।
मैं सिर्फ JDK 1.8.0_131में ZoneId.getAvailableZoneIds()
कहा जाता है और यह 600 प्रविष्टियां हैं। शायद कोई भी 600 enum स्थिरांक बनाना चाहता था।
कोई तर्क दे सकता है कि वे java.util.Locale
वर्ग के समान कुछ कर सकते थे, जिसमें कुछ भाषाओं (जैसे अंग्रेजी, जर्मन, फ्रेंच, आदि) के लिए कुछ प्रविष्टियां हैं। लेकिन यह तय करने के लिए कि कौन से समय क्षेत्र निरंतर "लायक" हैं?हो सकता है कि उन्होंने बस उस और के बारे में बहुत कुछ नहीं सोचने का फैसला किया "अरे, इसे भूल जाओ, ज़ोन नाम" के साथ बस String
का उपयोग करें।
एक अन्य संभावित कारण तथ्य यह है कि ZoneId.of()
विधि भी यूटीसी ऑफसेट (जैसे +05:00
, -0300
, +09:30:15
और इसी तरह) प्राप्त करने के लिए डिजाइन किया गया था हो सकता है। चूंकि ऑफ़सेट घंटे, मिनट और सेकंड स्वीकार करते हैं, इसलिए सैकड़ों संभावित ऑफसेट हैं और प्रत्येक के लिए enums बनाने अव्यवहारिक होगा।
फिर से, कोई पर बहस कर सकता है "अरे, नामों के लिए केवल enums बनाएं और ऑफ़सेट के बारे में भूल जाएं"। लेकिन संभव enum नाम बनाने के कारणों से पहले ही चर्चा नहीं हुई थी।
समय क्षेत्र डेटा हर समय बदलता है। नामित जोन कोड को तोड़ने के बिना डेटा को बदलने की अनुमति देते हैं। – shmosel
ठीक है। बस चर्चा को आगे बढ़ाने के लिए कोड अभी भी तोड़ नहीं होगा, लेकिन संकलन समय के बजाय रनटाइम में? – Renan
संभवतः, इसका उपयोग कैसे किया गया था इसके आधार पर। लेकिन स्पष्ट रूप से दोनों के बीच एक बड़ा अंतर है। – shmosel