2012-02-21 15 views
17

मुझे इस समस्या के लिए जावा Date कक्षा का उपयोग करना है (यह मेरे नियंत्रण से कुछ के साथ इंटरफेस करता है)।एक साल की शुरुआत और समाप्ति तिथि कैसे प्राप्त करें?

मैं एक वर्ष की शुरुआत और समाप्ति तिथि कैसे प्राप्त करूं और फिर प्रत्येक तारीख के माध्यम से फिर से शुरू करूं?

+2

दिनांक decapricated है। इसके बजाय कैलेंडर का प्रयोग करें। –

+6

तो, 'कैलेंडर' एक विकल्प नहीं है? @Stas: यह सच नहीं है। बहिष्कृत तरीकों का एक गुच्छा पूरे वर्ग को बहिष्कृत नहीं करता है। – BalusC

+0

@ बालससी: "जेडीके 1.1 से पहले, कक्षा की तारीख में दो अतिरिक्त कार्य थे। इसने दिनांक, महीने, दिन, घंटा, मिनट और दूसरे मूल्यों की तारीखों की व्याख्या की अनुमति दी। इसने दिनांक तारों के प्रारूपण और विश्लेषण की भी अनुमति दी। दुर्भाग्यवश, इन कार्यों के लिए एपीआई अंतर्राष्ट्रीयकरण के लिए उपयुक्त नहीं था। जेडीके 1.1 के अनुसार, कैलेंडर वर्ग का उपयोग तारीखों और समय क्षेत्रों के बीच कनवर्ट करने के लिए किया जाना चाहिए और डेटफॉर्मैट क्लास का उपयोग दिनांक तारों को प्रारूपित और पार्स करने के लिए किया जाना चाहिए। तिथि में संबंधित विधियां बहिष्कृत हैं। " –

उत्तर

32
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2014); 
cal.set(Calendar.DAY_OF_YEAR, 1);  
Date start = cal.getTime(); 

//set date to last day of 2014 
cal.set(Calendar.YEAR, 2014); 
cal.set(Calendar.MONTH, 11); // 11 = december 
cal.set(Calendar.DAY_OF_MONTH, 31); // new years eve 

Date end = cal.getTime(); 

//Iterate through the two dates 
GregorianCalendar gcal = new GregorianCalendar(); 
gcal.setTime(start); 
while (gcal.getTime().before(end)) { 
    gcal.add(Calendar.DAY_OF_YEAR, 1); 
    //Do Something ... 
} 
+0

आह मुझे नहीं पता था कि आप कैलेंडर और तिथि के बीच परिवर्तित हो सकते हैं! –

+2

आप उनके बीच परिवर्तित नहीं करते हैं; एक तिथि समय में तत्काल प्रतिनिधित्व करती है, जबकि कैलेंडर आपको बताता है कि किसी विशेष प्रणाली में उस तत्काल का प्रतिनिधित्व कैसे किया जाता है। – PaulJWilliams

+6

इस कोड को 'cal.set (calendar.MONTH, calendar.DECEMBER) जैसे स्थिरांक के साथ बेहतर किया जा सकता है; ' – tos

0

आप के रूप में इस धागे में दिखाया गया Java Joda Time - Implement a Date range iterator

इसके अलावा Jodatime उपयोग कर सकते हैं, तो आप ग्रेगोरियन कैलेंडर का उपयोग करें और एक समय में एक दिन ले जाते हैं, जैसा कि यहाँ दिखाया जा सकता है। I need a cycle which iterates through dates interval

पीएस। सलाह का टुकड़ा: इसे पहले खोजें।

4
// suppose that I have the following variable as input 
    int year=2011; 
    Calendar calendarStart=Calendar.getInstance(); 
    calendarStart.set(Calendar.YEAR,year); 
    calendarStart.set(Calendar.MONTH,0); 
    calendarStart.set(Calendar.DAY_OF_MONTH,1); 
    // returning the first date 
    Date startDate=calendarStart.getTime(); 

    Calendar calendarEnd=Calendar.getInstance(); 
    calendarEnd.set(Calendar.YEAR,year); 
    calendarEnd.set(Calendar.MONTH,11); 
    calendarEnd.set(Calendar.DAY_OF_MONTH,31); 

    // returning the last date 
    Date endDate=calendarEnd.getTime(); 

पुनरावृति करने के लिए, आप कैलेंडर वस्तु का उपयोग करें और DAY_OF_MONTH चर

आशा है कि यह मदद कर सकते हैं

+0

आप बस इसके बजाय वर्ष का दिन उपयोग कर सकते हैं .. –

+0

@ srini.venigalla: true – VirtualTroll

+0

आह मुझे नहीं पता था कि आप कैलेंडर और तिथि के बीच परिवर्तित हो सकते हैं! –

1

मुझे लगता है आप दिनांक वर्ग उदाहरण है कि बढ़ा देते हैं और आप खोजने की जरूरत है चाहिए डेट क्लास इंस्टेंस के संदर्भ में चालू वर्ष की पहली तिथि और अंतिम तिथि। आप इसके लिए कैलेंडर क्लास का उपयोग कर सकते हैं। प्रदत्त दिनांक वर्ग उदाहरण का उपयोग कर कैलेंडर उदाहरण बनाएं। महीने और DAY_OF_MONTH फ़ील्ड को क्रमशः 0 और 1 पर सेट करें, फिर getTime() विधि का उपयोग करें जो दिनांक वर्ग के उदाहरण को वर्ष के पहले दिन का प्रतिनिधित्व करेगा। आप वर्ष के अंत को खोजने के लिए एक ही तकनीक का उपयोग कर सकते हैं।

Date date = new Date(); 
    System.out.println("date: "+date); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 

    System.out.println("cal:"+cal.getTime()); 

    cal.set(Calendar.MONTH, 0); 
    cal.set(Calendar.DAY_OF_MONTH, 1); 

    System.out.println("cal new: "+cal.getTime()); 
0

गंभीरता से, बस Googling "जावा वर्ष के पहले दिन" मुझे this link, कैलेंडर निर्माण के प्रयोग पर एक महान उदाहरण मिला है।

सुनिश्चित नहीं है कि आप तारीख का उपयोग क्यों करना चाहते हैं जब तक कि आप बाध्य न हों और यह किसी प्रकार का होमवर्क असाइनमेंट है।

+0

एपीआई सीमाएं जिन्हें मैं चारों ओर नहीं मिल सकता, हालांकि विचार के लिए धन्यवाद! –

+0

लिंक मर चुका है :( –

+0

लिंक अपडेट किया गया, सिर के लिए धन्यवाद! – Carlos

5
Calendar cal = new GregorianCalendar(); 
    cal.set(Calendar.DAY_OF_YEAR, 1); 
    System.out.println(cal.getTime().toString()); 
    cal.set(Calendar.DAY_OF_YEAR, 366); // for leap years 
    System.out.println(cal.getTime().toString()); 
+0

यह स्वीकार्य उत्तर होना चाहिए – mithrandir

+1

क्या यह गैर-लीप वर्षों के लिए काम करने जा रहा है? या इसे मैन्युअल रूप से सही किया जाना चाहिए? – Davor

+0

याद रखें कि कुछ वर्षों में 365 दिन और अन्य के पास 366. उस दृष्टिकोण का उपयोग नहीं किया जाना चाहिए। –

0

आप Apache Commons-लैंग परियोजना जो एक DateUtils वर्ग है उपयोग कर सकते हैं।

वे एक पुनरावर्तक प्रदान करते हैं जिसे आप दिनांक वस्तु दे सकते हैं।

लेकिन मैं अन्य उत्तरों द्वारा सुझाए गए कैलेंडर वर्ग का उपयोग करने का सुझाव देता हूं।

-1
Calendar cal = Calendar.getInstance();//getting the instance of the Calendar using the factory method 
we have a get() method to get the specified field of the calendar i.e year 

int year=cal.get(Calendar.YEAR);//for example we get 2013 here 

cal.set(year, 0, 1); setting the date using the set method that all parameters like year ,month and day 
Here we have given the month as 0 i.e Jan as the month start 0 - 11 and day as 1 as the days starts from 1 to30. 

Date firstdate=cal.getTime();//here we will get the first day of the year 

cal.set(year,11,31);//same way as the above we set the end date of the year 

Date lastdate=cal.getTime();//here we will get the first day of the year 

System.out.print("the firstdate and lastdatehere\n"); 
+1

क्या आप अपना कोड समझा सकते हैं, कृपया? इस समय यह बहुत उपयोगी नहीं है। – kleinfreund

-1
GregorianCalendar gcal = new GregorianCalendar(); 
gcal.setTime(start); 
while (gcal.getTime().before(end)) { 
    gcal.add(Calendar.DAY_OF_YEAR, 1); 
    //Do Something ... 
} 

ग्रेगोरी कैलेंडर निर्माण यहाँ व्यर्थ है। वास्तव में, कैलेंडर.जावा स्रोत कोड के माध्यम से जा रहा है कि कैलेंडर.getInstance() पहले से ही एक ग्रेगोरियन कैलेंडर उदाहरण देता है।

सादर, निकोलस

0

अद्यतन: Joda समय पुस्तकालय अपनी टीम java.time वर्गों के लिए प्रवास की सलाह दे के साथ रखरखाव मोड में है। सही java.time Answer by Przemek देखें।

समय क्षेत्र

अन्य जवाब समय क्षेत्र के महत्वपूर्ण मुद्दे पर ध्यान न दें।

Joda समय

बचें बेहद परेशानी java.util.Date वर्ग के साथ तिथि-समय काम कर रही। इसके बजाय जोडा-टाइम या जावा.टाइम का उपयोग करें। इंटरऑपरेबिलिटी के लिए जरूरी j.u.Date ऑब्जेक्ट्स में कनवर्ट करें।

DateTimeZone zone = DateTimeZone.forID("America/Montreal") ; 
int year = 2015 ; 
DateTime firstOfYear = new DateTime(year , DateTimeConstants.JANUARY , 1 , 0 , 0 , zone) ; 
DateTime firstOfNextYear = firstOfYear.plusYears(1) ; 
DateTime firstMomentOfLastDayOfYear = firstOfNextYear.minusDays(1) ; 

Convert java.util.Date करने के लिए

रूप में की जरूरत j.u.Date में बदलें।

java.util.Date d = firstOfYear.toDate() ; 
24

java.time

java.time पुस्तकालय जावा 8 और बाद में बनाया का उपयोग करना। विशेष रूप से LocalDate और TemporalAdjusters कक्षाएं।

import java.time.LocalDate 
import static java.time.temporal.TemporalAdjusters.firstDayOfYear 
import static java.time.temporal.TemporalAdjusters.lastDayOfYear 

LocalDate now = LocalDate.now(); // 2015-11-23 
LocalDate firstDay = now.with(firstDayOfYear()); // 2015-01-01 
LocalDate lastDay = now.with(lastDayOfYear()); // 2015-12-31 

आप समय की जानकारी जोड़ने की जरूरत है, तो आप किसी भी उपलब्ध LocalDate को LocalDateTime रूपांतरण

lastDay.atStartOfDay(); // 2015-12-31T00:00 
+0

अच्छा उत्तर। मैं हमेशा वांछित/अपेक्षित समय क्षेत्र को ' LOCALDATE।अब (जोनआईडी) 'JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र पर अंतर्निहित रूप से भरोसा करने के बजाय जो रनटाइम के दौरान किसी भी समय बदल सकता है। 'LocalDate.now (ZoneId.of (" अमेरिका/मॉन्ट्रियल ")) 'इसी प्रकार, हमेशा JVM डिफ़ॉल्ट पर भरोसेमंद रूप से भरोसा करने के बजाय' atIartOfDay' विधि पर' जोन आईडी 'को पास करें। 'lastDay.atStartOfDay (ZoneID.of (" अमेरिका/मॉन्ट्रियल "))' –

1

की तरह उपयोग कर सकते हैं आप देख रहे हैं एक पंक्ति-अभिव्यक्ति के लिए, मैं आमतौर पर इस का उपयोग करें:

new SimpleDateFormat("yyyy-MM-dd").parse(String.valueOf(new java.util.Date().getYear())+"-01-01") 
0

श्रीनी के उत्तर में सुधार।
Calendar.getActualMaximum का उपयोग कर वर्ष की अंतिम तिथि निर्धारित करें।

Calendar cal = Calendar.getInstance(); 

calDate.set(Calendar.DAY_OF_YEAR, 1); 
Date yearStartDate = calDate.getTime(); 

calDate.set(Calendar.DAY_OF_YEAR, calDate.getActualMaximum(Calendar.DAY_OF_YEAR)); 
Date yearEndDate = calDate.getTime(); 
संबंधित मुद्दे