वर्ष, महीने, दिन से जावा तिथि वस्तु बनाना


94
int day = Integer.parseInt(request.getParameter("day"));  // 25
int month = Integer.parseInt(request.getParameter("month")); // 12
int year = Integer.parseInt(request.getParameter("year")); // 1988

System.out.println(year);

Calendar c = Calendar.getInstance();
c.set(year, month, day, 0, 0);  

b.setDob(c.getTime());

System.out.println(b.getDob());  

आउटपुट है:

1988
बुध 25 25 00:00:08 IST 1989

मैं गुजर 25 12 1988रहा हूं लेकिन मुझे मिलता है 25 Jan 1989। क्यों?


1
कोड में b क्या है?
मिस्ट्रीग्यू

जवाबों:


109

कैलेंडर में महीने शून्य-आधारित हैं। तो 12 को डेस + 1 महीने के रूप में व्याख्या की जाती है। उपयोग

c.set(year, month - 1, day, 0, 0);  

5
आईबीएम एपीआई डिजाइनर, जावास्क्रिप्ट एपीआई डिजाइनर। उसके अलावा, शायद कोई नहीं। ध्यान दें कि कैलेंडर को अब Java 8 java.time API द्वारा माना जाता है, जो सही काम करता है।
जेबी निज़ात

63

जावा 8 से पहले मेरा पसंदीदा तरीका है:

Date date = new GregorianCalendar(year, month - 1, day).getTime();

मैं कहूंगा कि यह एक क्लीनर दृष्टिकोण है:

calendar.set(year, month - 1, day, 0, 0);

4
Calendarस्थिरांक का उपयोग करके महीना निर्दिष्ट किया जा सकता है । Calendar.FEBRUARY
जीकरिस्ट '’

1
खबरदार, महीनों जावा में शून्य से गिने जाते थे। परेशानी से बचने के लिए स्थिरांक का उपयोग करें।
jediz

25

java.time

java.timeजावा 8 में निर्मित फ्रेमवर्क का उपयोग करना

int year = 2015;
int month = 12;
int day = 22;
LocalDate.of(year, month, day); //2015-12-22
LocalDate.parse("2015-12-22"); //2015-12-22
//with custom formatter 
DateTimeFormatter.ofPattern formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate.parse("22-12-2015", formatter); //2015-12-22

यदि आपको समय (घंटे, मिनट, सेकंड) के बारे में जानकारी की आवश्यकता है तो से कुछ रूपांतरण का उपयोग LocalDateकरेंLocalDateTime

LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00

अच्छा उत्तर, लेकिन ज्ञात होने पर एक समय क्षेत्र निर्दिष्ट करें। A LocalDateका कोई समय क्षेत्र नहीं है और इसलिए वह समयावधि पर एक सटीक क्षण का प्रतिनिधित्व नहीं करता है। यदि आपका संदर्भ एक समय क्षेत्र को इंगित करता है, तो इसे एक ZonedDateTimeवस्तु प्राप्त करने के लिए लागू करें : LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
बेसिल बोर्के

8

जावा का कैलेंडर प्रतिनिधित्व सबसे अच्छा नहीं है, वे इस पर जावा 8 के लिए काम कर रहे हैं। मैं आपको सलाह दूंगा कि आप जोडा टाइम या किसी अन्य समान लाइब्रेरी का उपयोग करें ।

यहाँ एक त्वरित उदाहरण जोडा टाइम लाइब्रेरी से लोकलडेट का उपयोग कर रहा है:

LocalDate localDate = new LocalDate(year, month, day);
Date date = localDate.toDate();

यहां आप क्विक स्टार्ट ट्यूटोरियल फॉलो कर सकते हैं।


6

देखें JavaDoc :

महीना - मान कैलेंडर कैलेंडर फ़ील्ड सेट करने के लिए उपयोग किया जाता है। महीने का मान 0-आधारित है। जैसे, जनवरी के लिए 0।

इसलिए, आपके द्वारा निर्धारित माह अगले वर्ष का पहला महीना है।


0

तारीखों, टाइमस्टैम्प और अवधि के साथ काम करते समय अपने जीवन को आसान बनाएं। से HalDateTime का उपयोग करें

http://sourceforge.net/projects/haldatetime/?source=directory

उदाहरण के लिए, आप इसे इस तरह से अपने इनपुट को पार्स करने के लिए उपयोग कर सकते हैं:

HalDateTime mydate = HalDateTime.valueOf( "25.12.1988" );
System.out.println( mydate );   // will print in ISO format: 1988-12-25

आप पार्सिंग और प्रिंटिंग के लिए पैटर्न भी निर्दिष्ट कर सकते हैं।


3
ऐसा लगता है कि आप अपनी लाइब्रेरी क्लास को बढ़ावा दे रहे हैं? शायद इसकी अनुमति है, लेकिन यदि आप एक मुख्य डेवलपर हैं तो इसका उल्लेख अच्छा लगेगा HalDateTime
ओले वीवी

मैं नीचे नहीं हुआ। हालाँकि जिंदगी कभी भी तारीखों से आसान नहीं होती। आपका पुस्तकालय उस तथ्य को नहीं बदलेगा।
किलटेक

नीचता क्यों? 2013 से मेरी लाइब्रेरी की तारीखें। सभी कार्यक्षमता java.time में उपलब्ध है जैसा कि जेएसआर 310 में निर्दिष्ट किया गया है जो मुझे व्यक्तिगत रूप से सबसे अच्छे भारतीय एपीआई में से एक है। मैं पूरी तरह से उस एक का उपयोग करने की सलाह देता हूं।
हाजो लेमके
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.