निर्धारित करने के लिए "दिन" को समय क्षेत्र की आवश्यकता होती है। एक समय क्षेत्र परिभाषित करता है जब "दिन" शुरू होता है। एक समय क्षेत्र में डेलाइट सेविंग टाइम और अन्य विसंगतियों को संभालने के नियम शामिल हैं। समय क्षेत्र अप्रासंगिक बनाने के लिए कोई जादू नहीं है। यदि आप इस मुद्दे को अनदेखा करते हैं, तो JVM का डिफ़ॉल्ट समय क्षेत्र लागू किया जाएगा। यह भ्रम और दर्द का कारण बनता है।
बचें java.util.Date
java.util.Date और .Calendar कक्षाएं बेहद परेशानी में हैं। उनसे बचें। वे इतने बुरे हैं कि सूर्य/ओरेकल उन्हें जावा 8 में नए java.time package के साथ आपूर्ति करने पर सहमत हुए। या तो उस या Joda-Time का उपयोग करें।
Joda समय
उदाहरण Joda समय 2.3 में कोड।
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); // Specify or else the JVM's default will apply.
DateTime dateTime = new DateTime(new java.util.Date(), timeZone); // Simulate passing a Date.
DateTime weekAgo = dateTime.minusDays(7);
दिवस
या, आप इतनी के रूप में समय के एक पूरे दिन के मूल्य पर कब्जा करने के दिन के पहले पल के लिए समय दिन-का-समायोजित करना चाहते मई के पहले पल। विधि withTimeAtStartOfDay
पर कॉल करें। ध्यान रखें कि यह आमतौर पर 00:00:00
है लेकिन हमेशा नहीं।
बचें Joda समय में "आधी रात" तरीकों और वर्गों। वे एक दोषपूर्ण अवधारणा पर आधारित हैं और अब बहिष्कृत हैं।
DateTime dateTimeStart = new DateTime(new java.util.Date(), timeZone).withTimeAtStartOfDay(); // Not necessarily the time "00:00:00".
DateTime weekAgo = dateTime.minusDays(7).withTimeAtStartOfDay();
कन्वर्ट करने के लिए/j.u.Date
जैसा कि ऊपर देखा, java.util.Date से Joda समय में बदलने के लिए केवल दिनांक समय के निर्माता के लिए दिनांक वस्तु पारित से। समझें कि एक j.u.Date में कोई समय क्षेत्र नहीं है, दिनांक दिनांक करता है। तो यह तय करने के लिए वांछित/उपयुक्त समय क्षेत्र असाइन करें कि "दिन" क्या हैं और जब वे शुरू होते हैं।
दूसरी तरफ जाने के लिए, दिनांक समय से j.u.Date तक, बस toDate
विधि पर कॉल करें।
java.util.Date date = dateTime.toDate();
स्रोत
2014-06-21 01:56:31
कैलेंडर बनाने के लिए, तारीख तय ('Calendar.setTime (तिथि) '),' Calendar.add (कैलेंडर। DAY_OF_YEAR, -7) ',' calendar.getTime() '... इतना बहुत खास क्या है? या सिर्फ नई तारीख (डी .getTime() - TimeUnit.DAYS.toMillis (7)) – bestsss
जैसा कि मुझे बताया जा रहा है "7 दिन पूर्व" एक अपरिहार्य नमूना हो सकता है। डेलाइट सेविंग टाइम से प्रभावित लोगों के लिए, यदि '7 दिन पूर्व 'से, तो आपका मतलब है कि यदि 14 मार्च 2010 को दोपहर 12 बजे दोपहर है, तो आप 7 मार्च को 12 बजे के परिणामस्वरूप' 7 दिन पूर्व 'की गणना चाहते हैं। 2010', फिर उन उत्तरों के बारे में सावधान रहें जो वास्तव में 168 घंटे के रूप में '7 दिन पूर्व' का इलाज करते हैं। आपके द्वारा '7 दिन पूर्व' का अर्थ हमेशा '168 घंटे 'नहीं होता है जब डीएसटी आपके लिए शुरू या समाप्त हो सकता है। –