स्वीकार किए जाते हैं जवाब सही है। Java.util.Date क्लास में † असाइन किया गया कोई समय क्षेत्र नहीं है, फिर भी यह toString
कार्यान्वयन भ्रमित रूप से JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र को लागू करता है।
बचें java.util.Date & .Calendar
यह कई कारणों से बेहद परेशानी java.util.Date, .Calendar, और SimpleDateFormat वर्गों जावा के साथ बंडल से बचने के लिए में से एक है। उनसे बचें। इसके बजाय का उपयोग या तो:
Joda समय
Joda समय 2.3 इस प्रकार के कुछ उदाहरण कोड। कई और उदाहरणों और अधिक चर्चा के लिए StackOveflow खोजें।
DateTimeZone timeZoneLondon = DateTimeZone.forID("Europe/London");
DateTimeZone timeZoneAthens = DateTimeZone.forID("Europe/Athens");
DateTime nowLondon = DateTime.now(timeZoneLondon);
DateTime nowAthens = nowLondon.withZone(timeZoneAthens);
DateTime nowUtc = nowLondon.withZone(DateTimeZone.UTC);
java.time
जावा 8 और बाद के एक नए java.time package में निर्मित है। यह पैकेज जोडा-टाइम से प्रेरित था। जबकि वे कुछ समानताएं और वर्ग के नाम साझा करते हैं, वे अलग हैं; प्रत्येक में अन्य कमीएं हैं। एक उल्लेखनीय अंतर यह है कि जावा.टाइम कन्स्ट्रक्टर से बचाता है, इसके बजाय स्थैतिक अस्थिरता विधियों का उपयोग करता है।
इस प्रश्न के मामले में, वे एक ही फैशन में काम करते हैं। समय क्षेत्र निर्दिष्ट करें, और वर्तमान पल प्राप्त करने के लिए now
विधि पर कॉल करें, फिर समय क्षेत्र के लिए समायोजित करने के लिए पुराने अपरिवर्तनीय उदाहरण के आधार पर एक नया उदाहरण बनाएं।
दो अलग-अलग समय क्षेत्र कक्षाओं पर ध्यान दें। एक नामित समय क्षेत्र है जिसमें डेलाइट सेविंग टाइम और अन्य ऐसे विसंगतियों के साथ-साथ यूटीसी से ऑफसेट भी शामिल है, जबकि दूसरा ऑफसेट है।
ZoneId zoneMontréal = ZoneId.of("America/Montreal");
ZonedDateTime nowMontréal = ZonedDateTime.now (zoneMontréal);
ZoneId zoneTokyo = ZoneId.of("Asia/Tokyo");
ZonedDateTime nowTokyo = nowMontréal.withZoneSameInstant(zoneTokyo);
ZonedDateTime nowUtc = nowMontréal.withZoneSameInstant(ZoneOffset.UTC);
† असल java.util.Date
वर्ग करता एक समय क्षेत्र its source code भीतर दफन है। लेकिन वर्ग उस व्यावहारिक उद्देश्यों के लिए उस समय क्षेत्र को अनदेखा करता है। तो, शॉर्टेंड के रूप में, अक्सर यह कहा जाता है कि j.u.Date का कोई समय क्षेत्र असाइन नहीं किया गया है। भ्रामक? हाँ। J.u.Date की गड़बड़ी से बचें और जोडा-टाइम और/या जावा.टाइम के साथ जाएं।
स्रोत
2014-07-15 07:19:36
क्या आप [जोडा टाइम] (http://stackoverflow.com/a/375803/1037210) का उपयोग करना चाहते हैं? यह मेरी वरीयता है। – Lion
जांचें [यह उत्तर] (http://stackoverflow.com/questions/230126/how-to-handle-calendar-timezones-using-java)। यह काम में आ सकता है। – Gamb
मुझे वेब पर एक और चीज मिली, जो संभवतः सबसे साफ समाधान है, दिनांक स्ट्रिंग को पार्स करने के लिए डेट टाइम प्रारूप का उपयोग करने के लिए और संबंधित समय क्षेत्र – Bober02