मैं कुछ ऐसा करना चाहता हूं:
Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"
यह कैसे करना है?
java.util.Date
अब विरासत , java.time कक्षाओं द्वारा ली गई ।
मैं कुछ ऐसा करना चाहता हूं:
Date date = new Date(); // current date
date = date - 300; // substract 300 days from current date and I want to use this "date"
यह कैसे करना है?
java.util.Date
अब विरासत , java.time कक्षाओं द्वारा ली गई ।
जवाबों:
जावा 8 की तारीख समय एपीआई परिवर्तन के साथ, का उपयोग करें LocalDate
LocalDate date = LocalDate.now().minusDays(300);
इसी तरह आप कर सकते हैं
LocalDate date = someLocalDateInstance.minusDays(300);
Java.util.Date <-> java.time। के बीच अनुवाद के लिए https://stackoverflow.com/a/23885950/260990 का संदर्भ लें।
Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
Calendar cal = Calendar.getInstance();
cal.setTime(dateInstance);
cal.add(Calendar.DATE, -30);
Date dateBefore30Days = cal.getTime();
java.util.Date
, java.util.Calendar
और java.text.SimpleTextFormat
अब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time कक्षाएं। ओरेकल द्वारा ट्यूटोरियल देखें ।
@JigarJoshi यह अच्छा जवाब है, और निश्चित रूप से भी @Tim सिफारिश का उपयोग करने के लिए। Joda समय ।
मैं केवल a से दिनों को घटाना चाहता हूँ java.util.Date
।
एक संभावना अपाचे-कॉमन्स-लैंग का उपयोग करने की है । आप इसका उपयोग कर सकते हैंDateUtils
निम्नानुसार :
Date dateBefore30Days = DateUtils.addDays(new Date(),-30);
निश्चित commons-lang
रूप से केवल तारीख घटाना करने के लिए निर्भरता जोड़ें, यह शायद एक अच्छा विकल्प नहीं है, हालांकि यदि आप पहले से ही commons-lang
इसका उपयोग कर रहे हैं तो यह एक अच्छा विकल्प है। सुविधाजनक विधियों के लिए भी है addYears
, addMonths
,addWeeks
और इतने पर, पर एक नज़र डालें एपीआई यहाँ ।
एक और संभावना है कि जावा 8LocalDate
से नई विधि का लाभ उठाया जाए।minusDays(long days)
LocalDate dateBefore30Days = LocalDate.now(ZoneId.of("Europe/Paris")).minusDays(30);
LocalDateTime
जानबूझकर उस वर्ग का उपयोग करने का कोई मतलब नहीं है और न ही समय क्षेत्र और न ही ऑफसेट-यूटीसी की अवधारणा है। ज़ोन / ऑफ़सेट अज्ञात या प्रासंगिक नहीं होने पर ही उसका उपयोग करें। इसके बजाय जब इसकी विधि को बुलाते हैं तो उपयोग करें LocalDate
और पास करें । याकूब वैन लिनन द्वारा सही उत्तर देखें । ZoneId
now
DateUtils
बस 300 दिनों से पहले की तारीख पाने के लिए इसका उपयोग करें, अपने दिनों के साथ 300 को बदलें:
Date date = new Date(); // Or where ever you get it from
Date daysAgo = new DateTime(date).minusDays(300).toDate();
यहाँ,
DateTime
है org.joda.time.DateTime;
Date
है java.util.Date
जावा 8 टाइम एपीआई:
Instant now = Instant.now(); //current date
Instant before = now.minus(Duration.ofDays(300));
Date dateBefore = Date.from(before);
java.time
मदद मिल सकती है। साथ ही, केवल एक कोड स्निपेट के बजाय स्टैक ओवरफ्लो पर कुछ चर्चा / स्पष्टीकरण की उम्मीद की जाती है। आपको यह निश्चित Duration
रूप से समझाना चाहिए कि वैन लिंगेन द्वारा मौजूदा एक पर आपके उत्तर का जोड़ा गया मूल्य है ।
जैसा कि आप देख सकते हैं कि यहाँ बहुत हेरफेर है जो आप कर सकते हैं। यहां एक उदाहरण दिखा रहा है कि आप क्या कर सकते हैं!
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
//Add one day to current date.
cal.add(Calendar.DATE, 1);
System.out.println(dateFormat.format(cal.getTime()));
//Substract one day to current date.
cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(dateFormat.format(cal.getTime()));
/* Can be Calendar.DATE or
* Calendar.MONTH, Calendar.YEAR, Calendar.HOUR, Calendar.SECOND
*/
java.util.Date
, java.util.Calendar
और java.text.SimpleDateFormat
अब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time जावा 8 और बाद में बनाया गया वर्गों। ओरेकल द्वारा ट्यूटोरियल देखें ।
जावा 8 के साथ अब यह वास्तव में सरल है:
LocalDate date = LocalDate.now().minusDays(300);
now
पद्धति को पारित करें । यदि छोड़ दिया जाता है, तो JVM का वर्तमान डिफ़ॉल्ट समय क्षेत्र निहित है और चुपचाप लागू किया जाता है। वह डिफ़ॉल्ट आपके नियंत्रण से बाहर है और रनटाइम के दौरान भी किसी भी समय बदल सकता है। उदाहरण: LocalDate.now( ZoneId.of( "America/Montreal" )
।
मैंने कार्य को आसान बनाने के लिए एक फ़ंक्शन बनाया है।
DateString के बाद 7 दिनों के लिए: dateCalculate(dateString,"yyyy-MM-dd",7);
DateString तक 7 दिन पाने के लिए: dateCalculate(dateString,"yyyy-MM-dd",-7);
public static String dateCalculate(String dateString, String dateFormat, int days) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat s = new SimpleDateFormat(dateFormat);
try {
cal.setTime(s.parse(dateString));
} catch (ParseException e) {
e.printStackTrace();
}
cal.add(Calendar.DATE, days);
return s.format(cal.getTime());
}
java.util.Date
, java.util.Calendar
है, और java.text.SimpleDateFormat
है कि अब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time कक्षाएं। ओरेकल द्वारा ट्यूटोरियल देखें ।
LocalDate.parse( "2017-01-23").plusWeeks( 1 )
अपनी खुद की विधि लिखने की तुलना में सरल है और अधिक स्व-दस्तावेजीकरण है।
आप SimpleDateFormat के साथ कैलेंडर के साथ आसानी से घटा सकते हैं
public static String subtractDate(String time,int subtractDay) throws ParseException {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);
cal.setTime(sdf.parse(time));
cal.add(Calendar.DATE,-subtractDay);
String wantedDate = sdf.format(cal.getTime());
Log.d("tag",wantedDate);
return wantedDate;
}
c1.set(2017, 12 , 01); //Ex: 1999 jan 20 //System.out.println("Date is : " + sdf.format(c1.getTime()));
c1.add(Calendar.MONTH, -2); // substract 1 month
System.out.println
("Date minus 1 month : "
+ sdf.format(c1.getTime()));