2016-02-07 9 views
13

पर एक को प्राथमिकता देने के लिए मुझे यूटीसी में मेरे सर्वर में होने वाली घटनाओं के डेटाटाइम को सहेजने और पेश करने की आवश्यकता है। मेरे पास Instant.now() या LocalDateTime.now (ZoneOffset.UTC)इंस्टेंट बनाम लोकलडेटाइम - अन्य

का उपयोग करने का विकल्प है, मुझे एक दूसरे को कब पसंद करना चाहिए?

उत्तर

12

यह इस बात पर निर्भर करता है कि आप डेटा के साथ क्या करना चाहते हैं। दो प्रकार अवधारणात्मक रूप से अलग हैं।

कल्पना कीजिए कि यह घटना 8 बजे यूटीसी में हुई थी।

एक बार आपके पास स्थानीयडेटाटाइम हो जाने के बाद, आप समय क्षेत्र की जानकारी खो चुके हैं और यह तकनीकी रूप से किसी भी समय क्षेत्र में हो सकता है - तो हो सकता है कि 8am यूटीसी या 8am ईएसटी (= 1 बजे यूटीसी) हो। इसका मतलब है कि आपको "पता होना" है कि आपका सम्मेलन यह है कि स्थानीयडेटाइम वास्तव में एक यूटीसी पल है।

यदि आप किसी इंस्टेंट का उपयोग करते हैं, तो आप जानते हैं कि समय क्षेत्र के बावजूद, समय में किस क्षण का उल्लेख किया जा रहा है, और बाहरी "ज्ञान" या सम्मेलन की आवश्यकता नहीं है। हालांकि आपके पास समय क्षेत्र की जानकारी नहीं है, इसलिए आप नहीं जानते कि यह 9 बजे सीईटी या 3 बजे ईएसटी का 8 बजे ब्रिटेन का समय है (लेकिन ये सभी समय में एक ही पल का प्रतिनिधित्व करते हैं)।

अंत में, यदि आपको समय पर दोनों पल की आवश्यकता है और किस समय क्षेत्र के साथ इसे जोड़ा जाना चाहिए, तो आप एक ज़ोनडेटडेट या ऑफसेटडेट टाइम का उपयोग कर सकते हैं जिसमें तत्काल और समय क्षेत्र जानकारी होगी।

+3

ऐसा लगता है कि इंस्टेंट अधिक प्रवाह के लिए उपयोग के लिए अधिक उपयुक्त है। और केवल जब मुझे उपयोगकर्ता को जानकारी का प्रतिनिधित्व करने की आवश्यकता होती है तो मैं रूपांतरण करूँगा: LocalDateTime.ofInstant (instantValue, ZoneOffset.UTC) (मुझे यह करना होगा क्योंकि विशिष्ट दिनांक और समय घटकों को निकालना असंभव है, जैसे घंटे या दिन, सीधे तत्काल प्रकार से) – galbarm

+0

हां यह समझ में आएगा। – assylias

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