मैं जावा में करंट डेट में एक महीना कैसे जोड़ूँ?


जवाबों:


116
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);

thanx पीयूष, और यह कैल दिनांक प्रारूप क्या है, मुझे इसे mysql में स्टोर करने की आवश्यकता है
kiran

तारीख के लिए mysql डेटा प्रकार DATETIME है।
किरन

क्या यह सही तिथि प्रारूप है जो कैल रिटर्न, कि मैं mysql में स्टोर करने के लिए उपयोग कर सकता हूं
किरान

1
वांछित प्रारूप में एक महीने की वर्तमान तारीख को जोड़ने के लिए जावा कोड नीचे दिखाया गया है। अब, यह इस स्ट्रिंग को दिनांक में परिवर्तित करने और MYSql डेटाबेस में सम्मिलित करने के लिए आपके ऊपर है। ध्यान दें, कि आप DateFormat कंस्ट्रक्टर में या बाद में MYSQL क्वेरी में STR_TO_DATE (str, format) फ़ंक्शन का उपयोग करके दिनांक स्वरूप बदल सकते हैं। DateFormat फ़ॉर्मेटर = नया SimpleDateFormat ("yyyy-MM-dd hh: mm: ss"); कैलेंडर अब = Calendar.getInstance (); now.add (Calendar.MONTH, 1); स्ट्रिंग dateString = formatter.format (now.getTime ());
पीयूष मट्टू

3
यह अब पुराना हो गया है: stackoverflow.com/questions/4905416/…
सॉफ्टनर

50

जावा 8

LocalDate futureDate = LocalDate.now().plusMonths(1);

1
Java.util.Date करने के लिए: Date.from ((LocalDate.now ()। PlusMonths (1))। AtStartOfDay ()। AtZone (ZoneId.systemDefault ())। Instant ())
इस्माइल

30

आप अपाचे के कॉमन्स लैंग डेट यूटिल्स हेल्पर उपयोगिता वर्ग का उपयोग कर सकते हैं।

Date newDate = DateUtils.addMonths(new Date(), 1);

आप http://commons.apache.org/proper/commons-lang/ पर कॉमन्स लैंग जार डाउनलोड कर सकते हैं


29

tl; डॉ

LocalDate::plusMonths

उदाहरण:

LocalDate.now( )
         .plusMonths( 1 );

समय क्षेत्र निर्दिष्ट करने के लिए बेहतर है।

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );

java.time

Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं जैसे पुराने परेशानी तिथि-समय वर्गों को प्रतिस्थापित java.util.Date, .Calendar, और java.text.SimpleDateFormatJoda समय टीम भी java.time के लिए प्रवास सलाह देता है।

अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें।

Java.time कार्यक्षमता की ज्यादातर में जावा 6 और 7 के लिए वापस भेजा जाता है ThreeTen-backport और आगे में एंड्रॉयड के लिए अनुकूलित ThreeTenABP

तारीख-केवल

यदि आप केवल दिनांक चाहते हैं, तो LocalDateकक्षा का उपयोग करें ।

ZoneId z = ZoneId.of( "America/Montreal" );
 LocalDate today = LocalDate.now( z );

Today.toString (): 2017-01-23

एक महीना जोड़ें।

LocalDate oneMonthLater = today.plusMonths( 1 );

oneMonthLater.toString (): 2017-02-23

दिनांक और समय

शायद आप तारीख के साथ-साथ समय भी चाहते हैं।

पहले यूटीसी में वर्तमान क्षण को नैनोसेकंड के संकल्प के साथ प्राप्त करें ।

Instant instant = Instant.now();

महीने जोड़ने का मतलब है तिथियों का निर्धारण करना। और तिथियों का निर्धारण करने का अर्थ है समय क्षेत्र लागू करना। किसी भी क्षण के लिए, तिथि दुनिया भर में पूर्व में पूर्व में एक नए दिन के साथ बदलती रहती है। तो उस Instantसमय क्षेत्र में समायोजित करें ।

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

अब अपना महीना जोड़ें। Java.time लीप महीने को संभालते हैं, और तथ्य यह है कि महीने लंबाई में भिन्न होते हैं।

ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );

इस तरह की गणना करते समय आप दिन के पहले क्षण को समय-समय पर समायोजित करना चाह सकते हैं। वह पहला क्षण हमेशा 00:00:00.0ऐसा नहीं होता है ताकि java.time दिन के समय का निर्धारण कर सके।

ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );

जावा के बारे में

Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat

Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।

अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है

Java.time कक्षाएं कहाँ से प्राप्त करें?

ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक


Joda समय

अपडेट: जोडा-टाइम परियोजना अब रखरखाव मोड में है। इसकी टीम java.time कक्षाओं में प्रवास की सलाह देती है। मैं इस अनुभाग को पोस्टरिटी के लिए बरकरार रख रहा हूं।

Joda समय पुस्तकालय एक स्मार्ट तरीके से महीने जोड़ने के लिए एक विधि प्रदान करता है।

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = DateTime.now( timeZone );
DateTime nextMonth = now.plusMonths( 1 );

आप दिन के पहले क्षण के लिए दिन के समय को समायोजित करके दिन पर ध्यान केंद्रित करना चाह सकते हैं।

DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();

12
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();

6

(दुग्गू से अनुकूलित)

public static Date addOneMonth(Date date)
{
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.MONTH, 1);
    return cal.getTime();
}

6

कैलंडर का उपयोग करें और इस कोड का प्रयास करें।

Calendar calendar = Calendar.getInstance();         
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
Date nextMonthFirstDay = calendar.getTime();
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date nextMonthLastDay = calendar.getTime();

5
public Date  addMonths(String dateAsString, int nbMonths) throws ParseException {
        String format = "MM/dd/yyyy" ;
        SimpleDateFormat sdf = new SimpleDateFormat(format) ;
        Date dateAsObj = sdf.parse(dateAsString) ;
        Calendar cal = Calendar.getInstance();
        cal.setTime(dateAsObj);
        cal.add(Calendar.MONTH, nbMonths);
        Date dateAsObjAfterAMonth = cal.getTime() ;
    System.out.println(sdf.format(dateAsObjAfterAMonth));
    return dateAsObjAfterAMonth ;
}`

क्या आप कुछ स्पष्टीकरण प्रदान कर सकते हैं कि आपका कोड केवल बड़े कोड ब्लॉक के बजाय क्या करता है?
नेकोरस

मेरा कोड अधिक प्रतिबंधात्मक और अधिक सामान्य है। अधिक प्रतिबंधक क्योंकि यह निर्धारित प्रारूप "MM / dd / yyyy" के साथ केवल दिनांक (स्ट्रिंग के रूप में) को संभालता है। सामान्य इसलिए, यह आपको अपनी निर्दिष्ट तिथि पर सकारात्मक महीने के बीच जोड़ने में सक्षम बनाता है।
डीजेएएम सिल्वेयर गातिन

इसलिए, यदि आपके पास कम प्रतिबंधक कोड है जो किसी भी java.util को लेते हैं। एक और java.util को सबमिट करें और एक महीने के बाद जमा करें। नीचे देखें: कैलेंडर cal = Calendar.getInstance (); cal.setTime (तारीख); cal.add (Calendar.MONTH, 1); cal.getTime ();
डीजेएएम सिल्वेयर गातिन


2

यदि आपको एक-लाइनर (यानी जैस्पर रिपोर्ट फॉर्मूले के लिए) की आवश्यकता है और अगर समायोजन ठीक एक महीना नहीं है तो बुरा मत मानना ​​(अर्थात "30 दिन" पर्याप्त है):

new Date($F{invoicedate}.getTime() + 30L * 24L * 60L * 60L * 1000L)


यदि संख्या को सरल int के रूप में माना जाएगा और किसी ऋणात्मक संख्या पर अतिप्रवाह किया जाएगा तो 'L' प्रत्यय को जोड़ना न भूलें!
निकोलस बुकेट

1

आप इस तरह का उपयोग कर सकते हैं;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String d = "2000-01-30";
Date date= new Date(sdf.parse(d).getTime());
date.setMonth(date.getMonth() + 1);

* @Deprecated JDK संस्करण 1.1 के रूप में, * द्वारा प्रतिस्थापित किया गया <code> Calendar.set (Calendar.MONTH, int month) </ code>। जैसा कि Date.java का कहना है।
जैस्पर लैंकहर्स्ट

1

एक महीने के बाद के दिन को खोजने के लिए, यह देखना जरूरी है कि आज का महीना किस दिन है।

इसलिए यदि दिन कोड के बाद महीने का पहला दिन है

Calendar calendar = Calendar.getInstance();

    Calendar calFebruary = Calendar.getInstance();
    calFebruary.set(Calendar.MONTH, Calendar.FEBRUARY);

    if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {// if first day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    Date nextMonthFirstDay = calendar.getTime();
    System.out.println(nextMonthFirstDay);

    }

यदि दिन महीने के अंतिम दिन है, तो निम्नलिखित कोड चलाएं।

    else if ((calendar.getActualMaximum(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH))) {// if last day of month
    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);
    }

यदि दिन निम्नलिखित कोड में फरवरी चलाने में है

    else if (calendar.get(Calendar.MONTH) == Calendar.JANUARY
            && calendar.get(Calendar.DAY_OF_MONTH) > calFebruary.getActualMaximum(Calendar.DAY_OF_MONTH)) {// control of february

    calendar.add(Calendar.MONTH, 1);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date nextMonthLastDay = calendar.getTime();
    System.out.println(nextMonthLastDay);

    }

निम्नलिखित कोड अन्य मामलों के लिए उपयोग किए जाते हैं।

    else { // any day
    calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    Date theNextDate = calendar.getTime();
    System.out.println(theNextDate);
    }

FYI करें, बहुत परेशान करने वाली तारीख-समय की कक्षाएं, जैसे कि java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब विरासत है , जावा 8 और बाद में निर्मित java.time कक्षाओं द्वारा ली गई । ओरेकल द्वारा ट्यूटोरियल देखें ।
तुलसी बोर्क



-3
public class StringSplit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        date(5, 3);
        date(5, 4);
    }

    public static String date(int month, int week) {
        LocalDate futureDate = LocalDate.now().plusMonths(month).plusWeeks(week);
        String Fudate = futureDate.toString();
        String[] arr = Fudate.split("-", 3);
        String a1 = arr[0];
        String a2 = arr[1];
        String a3 = arr[2];
        String date = a3 + "/" + a2 + "/" + a1;
        System.out.println(date);
        return date;
    }
}

आउटपुट:

10/03/2020
17/03/2020

1
सबसे पहले ओपी पर आधारित उत्तर गलत है। दूसरा ओपी 8 साल पहले उत्तर दिया गया था (और तीसरा) तार के भार का उपयोग करने की तुलना में एक तिथि आउटपुट स्वरूपित करने के लिए बेहतर तरीके हैं।
मार्कस डेबेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.