2012-09-19 15 views
13

मुझे क्रेडिट कार्ड की समाप्ति तिथि के लिए एक नई तिथि वस्तु उत्पन्न करने की आवश्यकता है, मेरे पास केवल एक महीने और एक वर्ष है, मैं उन दोनों के आधार पर दिनांक कैसे उत्पन्न कर सकता हूं? मुझे सबसे आसान तरीका संभव है। मैं यहां कुछ अन्य जवाब पढ़ रहा था, लेकिन वे सभी बहुत परिष्कृत लगते हैं।जावा में केवल महीना और वर्ष से तारीख कैसे उत्पन्न करें?

+0

आप दिन के लिए 1 और 31 के बीच किसी भी अंक का उपयोग क्यों नहीं करते हैं, उदाहरण के लिए 1? – krackmoe

+1

बस नई तारीख ("2013-04-01")? – antonpug

+0

नहीं, आपको कैलेंडर या ग्रेगोरियन कैलेंडर का उपयोग करना होगा। लेकिन आप दिन, महीने, वर्ष के साथ सेट कर सकते हैं: सेट (int वर्ष, int month, int date) और getTime() के साथ आपको दिनांक वस्तु वापस मिलती है – krackmoe

उत्तर

37

आप java.util.Calendar इस्तेमाल कर सकते हैं:

Calendar calendar = Calendar.getInstance(); 
calendar.clear(); 
calendar.set(Calendar.MONTH, month); 
calendar.set(Calendar.YEAR, year); 
Date date = calendar.getTime(); 
+2

मैं नई तिथि ("2013-05-01") का उपयोग नहीं कर सकता? मैंने थोड़ी देर में जावा में प्रोग्राम नहीं किया है, लेकिन अधिकांश भाषाओं से, यह ऐसा करने के लिए एक सामान्य समझ तरीका जैसा प्रतीत होता है? – antonpug

+4

सावधानी के एक शब्द के रूप में, दिन का क्षेत्र आज की तारीख पर सेट किया जाएगा। यदि वर्तमान दिन लक्ष्य माह के लिए सीमा के बाहर है तो इच्छित व्यवहार की जांच करें। उदाहरण के लिए, महीने को फरवरी में सेट करें जब 'कैलेंडर' का दिन 30 का दिन हो। दिन और वर्ष सेट करने से पहले दिन को प्रत्येक महीने के लिए एक ज्ञात, वैध मान (उदाहरण: 1) पर सेट करना बुद्धिमान हो सकता है। –

+0

अच्छा बिंदु, सभी डिफ़ॉल्ट मानों को साफ़ करने के लिए बेहतर – Reimeus

3

तरह

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM"); 
Date utilDate = formatter.parse(year + "/" + month); 

Create a java.util.Date Object from a Year, Month, Day Forma या

शायद की तरह
DateTime aDate = new DateTime(year, month, 1, 0, 0, 0); 

What's the Right Way to Create a Date in Java?

से कॉपी किया गया से कॉपी किया गया
+3

' डेटटाइम 'जोडा लाइब्रेरी से है। –

5

संभावित रूप से एक गैर-उत्तर के बाद से आपने java.util.Date के लिए कहा है, लेकिन यह इंगित करने का एक अच्छा अवसर है कि जावा में दिनांक और समय और कैलेंडर के साथ अधिकांश काम संभवतः Joda-Time लाइब्रेरी के साथ किया जाना चाहिए, इस मामले में

new LocalDate(year, month, 1) 

दिमाग में आता है।

जोडा-टाइम में महीने के दिनों के बारे में कई अन्य अच्छी चीजें हैं। उदाहरण के लिए यदि आप वर्तमान महीने के पहले दिन में जानना चाहता था, आप

LocalDate firstOfThisMonth = new LocalDate().withDayOfMonth(1); 

अपनी टिप्पणी में लिख सकते हैं आप, java.util.Date निर्माता के लिए एक स्ट्रिंग गुजर के बारे में पूछने उदाहरण के लिए:

new Date("2012-09-19") 

यह कन्स्ट्रक्टर का संस्करण बहिष्कृत है, इसलिए इसका उपयोग न करें। आपको डेट फॉर्मेटर बनाना चाहिए और parse पर कॉल करना चाहिए। यह अच्छी सलाह है क्योंकि आपके पास year और month पूर्णांक मानों के रूप में होगा, और एक अच्छी स्ट्रिंग, ठीक से गद्देदार और सीमांकित करने की आवश्यकता होगी और यह सब, जो सभी मामलों में सही होने के लिए अविश्वसनीय रूप से कठिन है। इसी कारण से डेट फॉर्मेटर का उपयोग करें जो जानता है कि सभी चीजों का पूरी तरह से देखभाल कैसे करें।

अन्य पहले के उत्तरों से पता चला कि यह कैसे करें।

+0

अच्छी तरह से एक संसाधन मैं इसे एक तिथि में लेने के लिए पास कर रहा हूं, इसलिए मुझे इसे प्रदान करना होगा। – antonpug

+0

हाँ, क्षमा करें, मैंने जवाब का विस्तार किया .... –

0

सबसे सामान्य ज्ञान दृष्टिकोण दिनांक ("वाई वाईवायवाई-एमएम-डीडी") कन्स्ट्रक्टर का उपयोग करना होगा, भले ही इसे बहिष्कृत किया गया हो। फ्लाई पर तारीख बनाने का यह सबसे आसान तरीका है। स्क्रू जो भी इसे बर्बाद करने का फैसला किया। लंबी लाइव तिथि ("YYYY-MM-DD") !!!

+0

वह कन्स्ट्रक्टर समय क्षेत्र में अविश्वसनीय रूप से काम करता है। संक्षेप में, यह अच्छी तरह परिभाषित नहीं है कि आप इससे क्या प्राप्त करते हैं। आप उस समय को मध्यरात्रि में कुछ समय क्षेत्र में प्राप्त करते हैं, जो अभी भी 26 या 27 घंटे भिन्नता के लिए जगह छोड़ देता है। एक कारण के लिए निर्माता को बहिष्कृत किया गया था। –

17

जावा।समय

जावा 8

import java.time.YearMonth; 

int year = 2015; 
int month = 12; 
YearMonth.of(year,month); // 2015-12 

में बनाया का उपयोग कर java.time ढांचे कस्टम DateTimeFormatter

import java.time.format.DateTimeFormatter; 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM yyyy"); 
YearMonth.parse("12 2015", formatter); // 2015-12 

रूपांतरण वाले String

YearMonth.parse("2015-12"); // 2015-12 

से YearMonth को अधिक मानक दिनांक प्रतिनिधित्व में परिवर्तित करने के लिए जो LocalDate है।

LocalDate startMonth = date.atDay(1); //2015-12-01 
LocalDate endMonth = date.atEndOfMonth(); //2015-12-31 
0

इस उत्तर का उपयोग न करें। Przemek और Ray Toel द्वारा उत्तरों का उपयोग करें। जैसा कि प्रेजेक कहते हैं, साल और महीने का प्रतिनिधित्व करने के लिए YearMonth का उपयोग करना पसंद करते हैं। जैसा कि दोनों कहते हैं, यदि आपको किसी तारीख का उपयोग करना है, तो LocalDate का उपयोग करें, यह दिन के बिना एक तिथि है।

यदि आपको पूरी तरह से अनिवार्य रूप से एक पुरानी शैली java.util.Date ऑब्जेक्ट की आवश्यकता है जो विरासत एपीआई के लिए है जिसे आप नहीं बदल सकते हैं, तो यहां एक आसान तरीका है। यह वांछित के रूप में काम नहीं कर सकता है, यह आपको बिल्कुल सही तारीख नहीं दे सकता है, यह आपकी सटीक आवश्यकताओं पर निर्भर करता है।

YearMonth expiration = YearMonth.of(2021, 8); // or .of(2021, Month.AUGUST); 
    Date oldFashionedDateObject = Date.from(expiration 
      .atDay(1) 
      .atStartOfDay(ZoneId.systemDefault()) 
      .toInstant()); 
    System.out.println(oldFashionedDateObject); 

अपने कंप्यूटर पर इस प्रिंट

Sun Aug 01 00:00:00 CEST 2021 

हम क्या मिला मेरे स्थानीय समय क्षेत्र में आधी रात में महीने के पहले है - अधिक सटीक, मेरी JVM की समय क्षेत्र सेटिंग। यह आपकी अच्छी विरासत एपीआई की अपेक्षा करता है कि यह एक अच्छा अनुमान है, लेकिन यह भी खतरनाक है। JVM की समय क्षेत्र सेटिंग प्रोग्राम के अन्य हिस्सों या उसी JVM में चल रहे अन्य प्रोग्रामों द्वारा हमारे पैरों के नीचे बदला जा सकता है। दूसरे शब्दों में, हम वास्तव में यह सुनिश्चित नहीं कर सकते कि हमें क्या मिलता है।

समय क्षेत्र समस्या तब भी बदतर हो जाती है जब किसी कंप्यूटर पर दिनांक अलग-अलग समय क्षेत्र चलाया जाता है, जैसे क्लाइंट से सर्वर या इसके विपरीत, या अपने समय क्षेत्र को चलाने वाले डेटाबेस में। आपके Date पिछले महीने में एक समय के रूप में आ जाएगा लगभग 50% जोखिम है।

यदि आप अंत में आवश्यक समय क्षेत्र जानते हैं, तो यह उपरोक्त स्निपेट में सिस्टम डिफ़ॉल्ट के बजाय उदाहरण ZoneId.of("America/New_York") निर्दिष्ट करने में मदद करेगा।

यदि आपका एपीआई कमजोर है और आपको सही माह के भीतर कुछ बिंदु की आवश्यकता है, तो आप इसे अपने समय क्षेत्र में यूटीसी या महीने के तीसरे महीने के दूसरे महीने देने से बेहतर होंगे। यहां बताया गया है कि पूर्व कैसे करें:

Date oldFashionedDateObject = Date.from(expiration 
      .atDay(2) 
      .atStartOfDay(ZoneOffset.UTC) 
      .toInstant()); 
संबंधित मुद्दे