जवाब (जोर मेरा) के javadocZoneId
से आता है ...
ज़ोनआईडीडी का उपयोग इंस्टेंट और लोकल डेटाइम के बीच कनवर्ट करने के लिए उपयोग किए जाने वाले नियमों की पहचान करने के लिए किया जाता है। आईडी के दो अलग-अलग प्रकार हैं:
- फिक्स्ड ऑफ़सेट्स - यूटीसी / ग्रीनविच से पूरी तरह से हल की गई ऑफसेट, जो सभी स्थानीय तिथि-समय के लिए एक ही ऑफ़सेट का उपयोग करता है
- भौगोलिक क्षेत्र - एक ऐसा क्षेत्र जहां यूटीसी / ग्रीनविच से ऑफसेट खोजने के लिए नियमों का एक विशिष्ट सेट लागू होता है
ज़ोनऑफ़सेट द्वारा अधिकांश फिक्स्ड ऑफ़सेट्स का प्रतिनिधित्व किया जाता है। किसी भी जोन पर सामान्यीकृत () कॉलिंग यह सुनिश्चित करेगी कि एक निश्चित ऑफसेट आईडी को जोनऑफसेट के रूप में दर्शाया जाएगा।
... और (जोर मेरा) के javadoc सेZoneId#of
:
यह विधि एक जोनआईड या ज़ोनऑफ़सेट बनाने वाली आईडी को पार्स करती है। यदि ID 'Z' है, या '+' या '-' से शुरू होता है, तो एक ज़ोनऑफसेट लौटा दिया जाता है ।
तर्क आईडी के रूप में निर्दिष्ट किया गया है "UTC"
, इसलिए यह ZoneId
एक ऑफसेट के साथ वापस आ जाएगा , जिसे स्ट्रिंग रूप में भी प्रस्तुत किया गया है:
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC));
System.out.println(now.withZoneSameInstant(ZoneId.of("UTC")));
आउटपुट:
2017-03-10T08:06:28.045Z
2017-03-10T08:06:28.045Z[UTC]
जैसा कि आप equals
तुलना के लिए विधि का उपयोग करते हैं , आप ऑब्जेक्ट तुल्यता की जांच करते हैं । वर्णित अंतर के कारण, मूल्यांकन का परिणाम है false
।
जब normalized()
विधि को दस्तावेज़ में प्रस्तावित के रूप में उपयोग किया जाता है, तो उपयोग करने वाली तुलना equals
वापस आ जाएगी true
, जैसा normalized()
कि संबंधित वापस आ जाएगी ZoneOffset
:
समय-क्षेत्र आईडी को सामान्य करता है, जहां संभव हो वहां एक ज़ोनऑफ़सेट लौटाता है।
now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true
जैसा कि प्रलेखन में कहा गया है, यदि आप उपयोग करते हैं "Z"
या "+0"
इनपुट आईडी के रूप of
में, ZoneOffset
सीधे लौट आएंगे और कॉल करने की कोई आवश्यकता नहीं है normalized()
:
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //true
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true
यह जाँचने के लिए कि क्या वे एक ही तारीख का समय संग्रहीत करते हैं , आप isEqual
इसके बजाय विधि का उपयोग कर सकते हैं :
now.withZoneSameInstant(ZoneOffset.UTC)
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true
नमूना
System.out.println("equals - ZoneId.of(\"UTC\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
System.out.println("equals - ZoneId.of(\"UTC\").normalized(): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())));
System.out.println("equals - ZoneId.of(\"Z\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("Z"))));
System.out.println("equals - ZoneId.of(\"+0\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("+0"))));
System.out.println("isEqual - ZoneId.of(\"UTC\"): "+ nowZoneOffset
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))));
आउटपुट:
equals - ZoneId.of("UTC"): false
equals - ZoneId.of("UTC").normalized(): true
equals - ZoneId.of("Z"): true
equals - ZoneId.of("+0"): true
isEqual - ZoneId.of("UTC"): true
ZoneId.of("Z")
आपको देता हैZoneOffset.UTC
लेकिनZoneId.of("UTC")
आपको एकZoneId
(जो नहीं हैZoneOffset.UTC
) देता है। यह एपीआई कम से कम कहने के लिए अचूक है।