मैं जावा में एक दिन की तारीख कैसे बढ़ा सकता हूं?


561

मैं इस प्रारूप में एक तिथि के साथ काम कर रहा हूं yyyy-mm-dd:।

मैं इस तिथि को एक दिन कैसे बढ़ा सकता हूं?


10
यदि आप जावा 8 या नए का उपयोग कर रहे हैं तो आप नई तिथि / समय एपि का उपयोग कर सकते हैं। इस उत्तर को देखें: stackoverflow.com/a/23910924/1115554
micha

4
नया दिनांक समय ()। प्लसडेज़ (1) .टोडेट () ???
पिएत्रो

जवाबों:


684

कुछ इस तरह करना चाहिए ट्रिक:

String dt = "2008-01-01";  // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1);  // number of days to add
dt = sdf.format(c.getTime());  // dt is now the new date

50
@Esko, c.roll (Calendar.DATE, true) महीने के आखिरी दिन को रोल नहीं करेगा।
सैम हिटलर

18
@ अम्मर यह एक बुरा विचार है अगर आपको कोई बात समझ में नहीं
आई

13
मैं कुछ JavaDocs बोली जाऊंगा ... Calendar.DATE: "... यह DAY_OF_MONTH का पर्याय है।" मैं चाहता हूं कि JavaDocs स्पष्ट करे कि इससे बड़े क्षेत्र (जैसे महीने और साल) में वृद्धि होगी। Calendar.roll "बड़े क्षेत्रों को बदलने के बिना दिए गए समय क्षेत्र पर समय की एक इकाई को जोड़ता या घटाता (ऊपर / नीचे करता है)" .. फिर से, "बड़े क्षेत्र" अस्पष्ट है लेकिन यह सैम की टिप्पणी के अनुरूप लगता है। काश पुराने JavaDocs फिक्सिंग के लिए एक StackOverflow थे।
jcalfee314 12

4
दोस्तों, दुर्भाग्य से, DATE, DAY_OF_MONTH या यहां तक ​​कि DAY_OF_YEAR का उपयोग करते हुए दिन जोड़ना काफी बेकार है - वे सभी मापांक द्वारा बढ़े हुए हैं। इसलिए 31-12-1970 के कैलेंडर को देखते हुए, जोड़ें (DAY_OF_YEAR, 1) या रोल (), हालांकि रोल () अंत में कॉल जोड़ें (), 01-01-1970 देगा। मुझे लगता है कि एकमात्र सही तरीका यह है कि मिलिसेकंड के साथ समय निर्धारित किया जाए। मेरे लिए, मैं फिर से कैलेंडर क्लास का उपयोग नहीं कर रहा हूं।
दिमित्री ग्रायाज़िन

14
@ बैगर: आप गलत हैंadd()तारीख को रोल करेगा। आइडोन पर देखें ।
जीन होमिनल

211

सी # की तुलना में आठ गेंद के पीछे जावा अच्छी तरह से दिखाई देती है। यह उपयोगिता विधि Calendar.add विधि (संभवतः एकमात्र आसान तरीका) का उपयोग करके जावा एसई 6 में करने का तरीका दिखाती है ।

public class DateUtil
{
    public static Date addDays(Date date, int days)
    {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, days); //minus number would decrement the days
        return cal.getTime();
    }
}

पूछे जाने वाले प्रश्न के अनुसार, एक दिन जोड़ने के लिए, इसे निम्नानुसार कॉल करें:

String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);

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

79

java.time

जावा 8 और बाद में, java.time पैकेज इसे बहुत अधिक स्वचालित बनाता है। ( ट्यूटोरियल )

Stringइनपुट और आउटपुट मानते हुए :

import java.time.LocalDate;

public class DateIncrementer {
  static public String addOneDay(String date) {
    return LocalDate.parse(date).plusDays(1).toString();
  }
}

3
FYI करें, दोनों ZonedDateDateTimeऔर OffsetDateTimeभी है plusDaysऔर minusDaysतरीकों में अच्छी तरह से के रूप मेंLocalDate
तुलसी Bourque

@BasilBourque ज़रूर, लेकिन सवाल में उपलब्ध जानकारी एक है LocalDate
डेनियल सी। सोबराल

2
@DanielCSobral हां। बस अपने पाठकों के संपादन के लिए लिंक जोड़ना। आलोचना नहीं।
तुलसी बोर्के

65

मैं अपाचे से डेट यूटिल्स का उपयोग करना पसंद करता हूं । इस http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html चेक करें । यह विशेष रूप से आसान है जब आपको इसे अपनी परियोजना में कई स्थानों पर उपयोग करना होगा और इसके लिए अपनी एक लाइनर विधि नहीं लिखना होगा।

एपीआई का कहना है:

addDays (दिनांक दिनांक, अंतर राशि): किसी नई वस्तु को वापस करने की तारीख में कई दिन जोड़ता है।

ध्यान दें कि यह एक नया दिनांक ऑब्जेक्ट लौटाता है और पिछले एक ही में परिवर्तन नहीं करता है।


59
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );

48

एक कैलेंडर ऑब्जेक्ट का निर्माण और विधि जोड़ने का उपयोग करें (Calendar.DATE, 1);


43

Joda-Time ( https://www.joda.org/joda-time/ ) पर एक नज़र डालें ।

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));

3
आप दिनांक समय निर्माण के लिए पार्सर कॉल हटा सकते हैं। DateTime दिनांक का उपयोग करें = नया DateTime (डेटस्ट्रिंग); फिर, nextDay ISODateTimeFormat.date () है। प्रिंट (date.plusDays (1)); अधिक जानकारी के लिए joda-time.sourceforge.net/api-release/org/joda/time/… देखें ।
MetroidFan2002

जोडा-टाइम का उपयोग करते हुए अधिक विस्तृत उदाहरण कोड के लिए, एक समान प्रश्न के लिए मेरा उत्तर देखें , एक दिन को एक तारीख में कैसे जोड़ें?
बेसिल बोर्के

2
FYI करें ... जोडा-टाइम परियोजना अब रखरखाव-मोड में है, और java.time कक्षाओं में प्रवासन की सलाह देती है । दोनों प्रयासों का नेतृत्व एक ही आदमी, स्टीफन कोलबोर्न ने किया। इसलिए वे समान अवधारणाओं को साझा करते हैं, और प्रवास मुश्किल नहीं है।
बेसिल बॉर्कल

40

कृपया ध्यान दें कि यह लाइन 24 घंटे जोड़ती है:

d1.getTime() + 1 * 24 * 60 * 60 * 1000

लेकिन यह रेखा एक दिन जुड़ जाती है

cal.add( Calendar.DATE, 1 );

दिन के उजाले बचत समय परिवर्तन (25 या 23 घंटे) के साथ आपको अलग-अलग परिणाम मिलेंगे!


40

Java 8 ने दिनांक और समय के साथ काम करने के लिए एक नया API जोड़ा।

जावा 8 के साथ आप कोड की निम्नलिखित पंक्तियों का उपयोग कर सकते हैं:

// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");

// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);

1
मुझे लगता है कि आपका मतलब januaryFirst.plusDays(1)नहीं था date.plusDays(1)
तेवु


1
@Subho 26 से पहले एंड्रॉइड के लिए, थ्रीटेनबप प्रोजेक्ट देखें जो थ्रीटेन -बैकपोर्ट प्रोजेक्ट को अडॉप्ट करता है , एक बैक-पोर्ट अगर जावा 6 और जावा 7 को जावा-टाइम की ज्यादातर कार्यक्षमता 7.
बेसिल बोर्के

29

आप साधारण java.util lib का उपयोग कर सकते हैं

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();

1
यह उत्तर तीन साल पहले के स्वीकृत उत्तर सहित कई उत्तरों की सामग्री को दोहराता है । मान जोड़ने के लिए कृपया अपना उत्तर हटाएं या संपादित करें।
बेसिल बोर्क

3
यह उत्तर क्लीनर है, बीच में तारीख को पार नहीं करता है। "स्वीकृत उत्तर" बहुत जटिल है। यह अच्छा है कि आपने अपना जोड़ा, तुलसी की स्वचालित टिप्पणी की अवहेलना की
मिकी पेरेलस्टीन

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

सबसे अच्छा जवाब, सीधे मुद्दे पर। मैं मिकी से सहमत हूं, बस तुलसी की टिप्पणी की अवहेलना करता
हूं

23
Date today = new Date();               
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");            
Calendar c = Calendar.getInstance();        
c.add(Calendar.DATE, 1);  // number of days to add      
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);

यह कल की तारीख देगा। c.add(...)उपयुक्त वेतन वृद्धि के लिए मापदंडों को 1 से दूसरी संख्या में बदला जा सकता है।


1
जोड़ने से पहले विशिष्ट दिनांक सेट करने के लिए आप c.setTime (दिनांक ऑब्जेक्ट) जैसा कुछ कर सकते हैं।
लिन लिनो

काश, डिफ़ॉल्ट जावा संकुल की तारीखों को कम जटिल बना दिया जाता ... मेरा मतलब है कि यह हर बार जब आप तारीखों से निपटना चाहते हैं तो ऐसा दर्द होता है ... बस एक शेख़ी ...
Shn_Android_Dev

1
@Shn_Android_Dev जावा 8 में निर्मित java.time कक्षाएं और बाद में भयानक पुरानी तारीखों की कक्षाओं को दबा देती हैं, और आपकी इच्छा का जवाब देती हैं। इसके अलावा थ्रीटेन-बैकपोर्ट और थ्रीटेनबप प्रोजेक्ट्स में जावा 6/7 और इससे पहले के एंड्रॉइड पर बैक-पोर्ट किया गया है । कभी भी Dateया Calendarफिर से उपयोग करने की आवश्यकता नहीं है ।
बेसिल बोर्के

19

यदि आप जावा 8 का उपयोग कर रहे हैं , तो इसे इस तरह से करें।

LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27);  // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format

String destDate = destDate.format(formatter));  // End date

यदि आप SimpleDateFormat का उपयोग करना चाहते हैं , तो इसे इस तरह से करें।

String sourceDate = "2017-05-27";  // Start date

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar

calendar.add(Calendar.DATE, 1);  // number of days to add
String destDate = sdf.format(calendar.getTime());  // End date

नहीं, प्रश्न ने केवल तिथि के लिए पूछा है, तिथि-समय नहीं। इसलिए LocalDateकक्षा का उपयोग न करें LocalDateTime
बेसिल बोर्के

1
आपका उत्तर कम से कम चार अन्य उत्तरों की सामग्री को दोहराता है। कृपया बताएं कि आपका मूल्य उन लोगों से आगे कैसे बढ़ता है, या नीचे-वोट एकत्र करने से पहले हटाएं।
बेसिल बोर्के

16
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);

यह पुराने डेडिकेट के बाद से मिलीसेकंड की संख्या लेता है और मिलीसेकंड के 1 दिन के मूल्य को जोड़ता है, फिर नए मूल्य का उपयोग करके एक तारीख बनाने के लिए दिनांक () सार्वजनिक निर्माणकर्ता का उपयोग करता है। यह विधि आपको न केवल पूरे दिन बल्कि 1 दिन, या किसी भी घंटे / मिनट को जोड़ने की अनुमति देती है।


यह शायद ओपी नहीं चाहता था; यह डेलाइट सेविंग-प्रकार समायोजन, लीप सेकंड आदि के लिए कोई भत्ता नहीं देता है।
mrec

1
डेलाइट बचत को समय-क्षेत्र / लोकेल द्वारा नियंत्रित किया जाना चाहिए। मेरा उदाहरण दिखा रहा था कि छोटी अवधि के लिए वेतन वृद्धि कैसे की जाए। जब दिनों से वृद्धि होती है, तो लीप सेकंड एक मुद्दा हो सकता है, लेकिन जब घंटे जोड़ते हैं, तो यह कम संभावना है, हालांकि अभी भी संभव है।
डेवी

15

चूंकि Java 1.5 TimeUnit.DAYS.toMillis (1) मुझे अधिक साफ दिखता है।

SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));

यह दिनांक-समय मान बनाता है जहाँ प्रश्न केवल दिनांक के लिए पूछता है। मेरा सुझाव है कि बहुत समझदार दृष्टिकोण LocalDateजावा 8 और बाद में जावा के लिए वर्ग है, और थ्री-बैकपोर्ट परियोजना में जावा 6 और जावा 7 के पीछे का पोर्ट मिला है ।
तुलसी बोर्क


11

जावा 8 में आप उपयोग कर सकते हैं java.time.LocalDate

LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1);   //Add one to the day field

आप java.util.Dateनिम्न प्रकार से ऑब्जेक्ट में परिवर्तित कर सकते हैं।

Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

आप LocalDateएक स्ट्रिंग में निम्नानुसार बना सकते हैं।

String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

11

यह बहुत आसान है, एक सरल शब्द में समझाने की कोशिश कर रहा है। आज की तारीख नीचे प्राप्त करें

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);

अब इस तिथि को कैलेंडर के अनुसार एक दिन आगे सेट करें। विधि जो (स्थिर, मान) लेती है। यहाँ निरंतर DATE, घंटे, मिनट, सेकंड आदि हो सकते हैं और मान स्थिरांक का मान है। एक दिन के लिए की तरह, निरंतर निरंतर Calendar.DATE है और इसका मान 1 है क्योंकि हम एक दिन आगे मूल्य चाहते हैं।

System.out.println(calendar.getTime());// print modified date which is कल की तारीख

धन्यवाद


7

Apache Commons के पास पहले से ही यह DateUtils.addDays (दिनांक दिनांक, int राशि) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java है .util.Date,% 20int% 29 जो आप उपयोग करते हैं या आप इसे अधिक क्लीनर बनाने के लिए JodaTime के साथ जा सकते हैं।


7

बस स्ट्रिंग में तारीख और अगले दिनों की संख्या

 private String getNextDate(String givenDate,int noOfDays) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        String nextDaysDate = null;
    try {
        cal.setTime(dateFormat.parse(givenDate));
        cal.add(Calendar.DATE, noOfDays);

       nextDaysDate = dateFormat.format(cal.getTime());

    } catch (ParseException ex) {
        Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
    }finally{
    dateFormat = null;
    cal = null;
    }

    return nextDaysDate;

}

7

यदि आप समय की एक इकाई को जोड़ना चाहते हैं और आप अपेक्षा करते हैं कि अन्य क्षेत्रों में भी वृद्धि होगी, तो आप सुरक्षित रूप से ऐड पद्धति का उपयोग कर सकते हैं। नीचे उदाहरण देखें:

SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));

प्रिंट होगा:

1970-12-31
1971-01-01
1970-12-31

कोई स्वीकृत उत्तर नहीं है और मुझे लगा कि अन्य क्षेत्रों के अपडेट होने पर समग्र भ्रम है।
टेरमिथ

7
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender

4
योगदान करने के लिए धन्यवाद। हालाँकि यह पहले से ही कई अन्य उत्तरों में है, इसलिए मुझे वास्तव में कोई बात नहीं दिखती है ... इसके अलावा IMHO Calendar2019 में खराब डिज़ाइन और लंबे समय तक पुराने वर्ग का उपयोग नहीं करना चाहिए।
ओले वीवी

6

यदि आप जावा एसई 8 या उच्चतर का उपयोग करते हैं तो आपको नई तिथि / समय एपीआई का उपयोग करना चाहिए

 int days = 7;       
 LocalDate dateRedeemed = LocalDate.now();
 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");

 String newDate = dateRedeemed.plusDays(days).format(formatter);   
 System.out.println(newDate);

यदि आप से परिवर्तित करना java.util.Dateचाहते हैं java.time.LocalDate, तो आप इस विधि का उपयोग कर सकते हैं।

  public LocalDate asLocalDate(Date date) {
      Instant instant = date.toInstant();
      ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
      return zdt.toLocalDate();
  }

यदि आप Java SE 8 से पहले के संस्करण का उपयोग कर रहे हैं तो मैं आपको सलाह देता हूं कि आप Joda-Time का उपयोग करें

जोडा-टाइम जावा तिथि और समय कक्षाओं के लिए एक गुणवत्ता प्रतिस्थापन प्रदान करता है और जावा 8 से पहले जावा के लिए वास्तविक मानक तिथि और समय पुस्तकालय है।

   int days = 7;       
   DateTime dateRedeemed = DateTime.now();
   DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/uuuu");

   String newDate = dateRedeemed.plusDays(days).toString(formatter);   
   System.out.println(newDate);

1
java.timeभाग के लिए आपका पैटर्न गलत है। यह dd/MM/uuuuJodaTime एक के बराबर होना चाहिए ।
TiiJ7

5

DateFormatस्ट्रिंग को दिनांक ऑब्जेक्ट में बदलने के लिए एपीआई का उपयोग करें , फिर Calendarएक दिन जोड़ने के लिए एपीआई का उपयोग करें । मुझे बताएं कि क्या आप विशिष्ट कोड उदाहरण चाहते हैं, और मैं अपना उत्तर अपडेट कर सकता हूं।


3

यदि आप जावा 8 का उपयोग कर रहे हैं, java.time.LocalDateऔर java.time.format.DateTimeFormatterइस काम को काफी सरल बना सकते हैं।

public String nextDate(String date){
      LocalDate parsedDate = LocalDate.parse(date);
      LocalDate addedDate = parsedDate.plusDays(1);
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
      return addedDate.format(formatter); 
}

और भी सरल: फ़ॉर्मेटर को छोड़ें और toString()स्ट्रिंग का निर्माण करने के लिए उपयोग करें i yyyy-MM-dd प्रारूप (और यदि आप जोर देते हैं, तो याद रखें कि mmवह MMमहीना है जबकि महीना है)।
ओले वीवी

3

आप इस पैकेज का उपयोग "org.apache.commons.lang3.time" से कर सकते हैं:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 Date myNewDate = DateUtils.addDays(myDate, 4);
 Date yesterday = DateUtils.addDays(myDate, -1);
 String formatedDate = sdf.format(myNewDate);  

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

हाँ, यह है, LocalDate ऐसा करने का सबसे अच्छा तरीका है,
Shaheed

हालाँकि कुछ फ्रेमवर्क जैसे कि jsf में समय एपीआई के साथ थोड़ा एकीकरण की समस्या होती है इसलिए कभी-कभी आपको तारीख का उपयोग करना चाहिए; प्लस पर्यावरण जावा <8
भाग्यशाली

1
@Lucke अधिकांश जावा.टाइम कार्यक्षमता को थ्रीटेन-बैकपोर्ट परियोजना में जावा 6 और 7 में वापस पोर्ट किया गया था । इसके अलावा तीनटैनबप प्रोजेक्ट में पुराने एंड्रॉइड के लिए अनुकूलित । इसलिए, वास्तव में उन खूनी भयानक पुरानी तिथि-समय की कक्षाओं को छूने की आवश्यकता नहीं है। कई रूपरेखाएँ अद्यतन की गई हैं। लेकिन सब नहीं। इसलिए यदि आपको java.time में अपडेट नहीं किए गए पुराने कोड के साथ इंटरॉपर्ट करना है , तो अपना नया कोड java.time में लिखें और पुराने वर्गों में जोड़े गए नए रूपांतरण विधियों को कॉल करके पुराने प्रकारों से / में कनवर्ट करें।
बेसिल बॉर्कल

1
यह कोड समय क्षेत्र के महत्वपूर्ण मुद्दे की अनदेखी करता है । किसी भी क्षण के लिए, तारीख ज़ोन द्वारा ग्लोब के चारों ओर बदलती है। SimpleDateFormatवर्ग दुर्भाग्य से एक समय क्षेत्र injects, परोक्ष JVM के वर्तमान डिफ़ॉल्ट क्षेत्र लागू करने। इसलिए इस कोड के परिणाम वर्तमान डिफ़ॉल्ट जो भी हो, के अनुसार अलग-अलग होंगे - और वह डिफ़ॉल्ट रनटाइम के दौरान किसी भी समय बदल सकता है।
बेसिल बोर्क

3

यह वास्तव में सरल है। एक दिन में 86400000 मिली सेकेंड होते हैं। तो पहले आप सिस्टम से मिली में वर्तमान समय प्राप्त करते System.currentTimeMillis()हैं और फिर 84000000 मिली सेकेंड जोड़कर सिस्टम का उपयोग करते हैंDate मिलीसेकंड के लिए ए डेट फॉर्मेट जनरेट करने के क्लास का ।

उदाहरण

String Today = new Date(System.currentTimeMillis()).toString();

स्ट्रिंग टुडे 2019-05-9 होगा

String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();

स्ट्रिंग टोमोरो 2019-05-10 होगा

String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();

स्ट्रिंग DayAfterTommorow 2019-05-11 होगा


यह कोड उस भयानक Dateवर्ग का उपयोग करता है जिसे आधुनिक java.time कक्षाओं द्वारा वर्षों पहले दबा दिया गया था । बस उपयोग करने के लिए इतना सरल:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
तुलसी Bourque

2

चलो उपयोग के मामले को स्पष्ट करते हैं: आप कैलेंडर अंकगणित करना चाहते हैं और एक java.util.Date के साथ शुरू / अंत करते हैं

कुछ दृष्टिकोण:

  1. SimpleDateFormat के साथ स्ट्रिंग और बैक में कनवर्ट करें : यह एक अक्षम समाधान है।
  2. LocalDate में कनवर्ट करें : आप किसी भी समय की जानकारी खो देंगे।
  3. LocalDateTime में परिवर्तित करें : इसमें अधिक चरण शामिल हैं और आपको बारे में चिंता करने की आवश्यकता है।
  4. Date.getTime () के साथ युग में कनवर्ट करें : यह कुशल है लेकिन आप मिलीसेकंड के साथ गणना कर रहे हैं।

Java.time.stant का उपयोग करने पर विचार करें :

Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);

1
कभी भी भयानक विरासत वर्गों का मिश्रण न करें जैसे Dateकि आधुनिक जावा.टाइम कक्षाएं जैसे InstantJava.time कक्षाएं पूरी तरह से विरासत वर्गों को प्रतिस्थापित। विशेष रूप से, Instantबदलता है java.util.Date
बेसिल बोर्क

1
प्रश्न को संबोधित नहीं करता है। आप एक पल का प्रतिनिधित्व करने वाले वर्गों का उपयोग कर रहे हैं (एक ऑफसेट या क्षेत्र के संदर्भ में समय के साथ एक तारीख)। लेकिन सवाल केवल समय के बिना और समय क्षेत्र के बिना तारीख के बारे में पूछता है। देखें सही जवाब Sobral से और सही जवाब micha द्वारा।
तुलसी बोर्क

0
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);

14
fyi, Date.setDate () पदावनत है
केली एस। फ्रेंच

मेरे कंप्यूटर पर यह एक महीने की सीमा में काम करने लगता है। के बाद Sun Apr 30 16:25:33 CEST 2017आता है Mon May 01 16:25:33 CEST 2017। हालांकि यह अभी भी हतोत्साहित समाधान है। न केवल एक अच्छे कारण के लिए पदावनत विधि है, 2017 में भी हमारे पास Dateकक्षा के लिए बहुत अच्छे विकल्प हैं ।
ओले वीवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.