जवाबों:
यहां डॉक्स से लिया गया :
कैलेंडर के नियमों के आधार पर, दिए गए कैलेंडर फ़ील्ड में समय की निर्दिष्ट मात्रा को जोड़ता या घटाता है। उदाहरण के लिए, कैलेंडर के वर्तमान समय से 5 दिन घटाने के लिए, आप इसे कॉल करके प्राप्त कर सकते हैं:
Calendar calendar = Calendar.getInstance(); // this would default to now calendar.add(Calendar.DAY_OF_MONTH, -5).
Calendar.DAY_OF_MONTH
इस मामले में उपयोग नहीं करेंगे क्योंकि यह महीनों के बीच रोल को संभाल नहीं पाएगा जैसा आप करना चाहते हैं। Calendar.DAY_OF_YEAR
इसके बजाय का उपयोग करें
आप add
विधि का उपयोग कर सकते हैं और इसे एक नकारात्मक संख्या दे सकते हैं। हालाँकि, आप एक सरल विधि भी लिख सकते हैं Calendar
जो निम्न जैसे वर्ग का उपयोग नहीं करता है
public static void addDays(Date d, int days)
{
d.setTime( d.getTime() + (long)days*1000*60*60*24 );
}
यह तिथि (समय के बाद के मिलीसेकंड) का टाइमस्टैम्प मान प्राप्त करता है और उचित संख्या में मिलीसेकंड जोड़ता है। आप घटाव करने के लिए दिनों के पैरामीटर के लिए एक नकारात्मक पूर्णांक पारित कर सकते हैं। यह "उचित" कैलेंडर समाधान की तुलना में सरल होगा:
public static void addDays(Date d, int days)
{
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, days);
d.setTime( c.getTime().getTime() );
}
ध्यान दें कि ये दोनों समाधान Date
पूरी तरह से नया लौटने के बजाय पैरामीटर के रूप में पारित वस्तु को बदलते हैं Date
। या तो फ़ंक्शन को आसानी से बदला जा सकता है, यदि वांछित है तो इसे दूसरे तरीके से किया जा सकता है।
java.util.Calendar
अब विरासत , java.time कक्षाओं द्वारा ली गई । ओरेकल द्वारा ट्यूटोरियल देखें ।
Anson का जवाब साधारण मामले के लिए ठीक काम करेगा, लेकिन अगर आप किसी और जटिल तारीख की गणना करने जा रहे हैं तो मैं Joda Time की जाँच करने की सलाह दूंगा । यह आपके जीवन को बहुत आसान बना देगा।
Joda समय में FYI करें आप कर सकते हैं
DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
LocalDate.now().minusDays( 10 )
समय क्षेत्र निर्दिष्ट करने के लिए बेहतर है।
LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )
जावा के शुरुआती संस्करणों के साथ बंडल किए गए पुराने दिनांक-समय की कक्षाएं, जैसे java.util.Date
/ .Calendar
, परेशानी, भ्रामक और त्रुटिपूर्ण साबित हुई हैं। इनसे बचें।
जावा 8 और बाद में नए java.time ढांचे के साथ उन पुराने वर्गों को दबा देता है। ट्यूटोरियल देखें । जेएसआर 310 द्वारा परिभाषित , जोडा-टाइम से प्रेरित और थ्रीटेन-एक्स्ट्रा प्रोजेक्ट द्वारा विस्तारित । थ्रीटेन-बैकपोर्ट परियोजना को जावा 6 और 7 में कक्षाओं को बैक-पोर्ट करता है; Android के लिए तीनTENABP परियोजना।
प्रश्न अस्पष्ट है, स्पष्ट नहीं है यदि यह केवल तारीख या तारीख के लिए पूछता है।
LocalDate
केवल दिनांक के लिए, दिन के समय के बिना, LocalDate
कक्षा का उपयोग करें । ध्यान दें कि "आज" जैसे किसी तिथि को निर्धारित करने में महत्वपूर्ण समय क्षेत्र।
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
LocalDate tenDaysAgo = today.minusDays( 10 );
ZonedDateTime
यदि आपके पास दिनांक-समय का मतलब है, तो यूटीसीInstant
में समय पर पल पाने के लिए कक्षा का उपयोग करें । वहां से, ऑब्जेक्ट प्राप्त करने के लिए एक समय क्षेत्र में समायोजित करें ।ZonedDateTime
Instant now = Instant.now(); // UTC.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
ZonedDateTime tenDaysAgo = zdt.minusDays( 10 );
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तारों की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।
int x = -1;
Calendar cal = ...;
cal.add(Calendar.DATE, x);
संपादित करें: पार्सर Javadoc के लिंक को पसंद नहीं करता है, इसलिए यहां यह सादे में है:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#add(int , int)
addDays
एली द्वारा सुझाए गए अनुसार अपना लिखने के बजाय , मैं अपाचेDateUtils
से उपयोग करना पसंद करूंगा । यह विशेष रूप से तब उपयोगी होता है जब आपको इसे अपने प्रोजेक्ट में कई स्थानों पर उपयोग करना होता है।
एपीआई का कहना है:
addDays(Date date, int amount)
एक नई वस्तु को लौटाने के लिए कई दिनों की तारीख जोड़ता है।
ध्यान दें कि यह एक नई Date
वस्तु लौटाता है और पिछले एक में बदलाव नहीं करता है।
इसे निम्न द्वारा आसानी से किया जा सकता है
Calendar calendar = Calendar.getInstance();
// from current time
long curTimeInMills = new Date().getTime();
long timeInMills = curTimeInMills - 5 * (24*60*60*1000); // `enter code here`subtract like 5 days
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
// from specific time like (08 05 2015)
calendar.set(Calendar.DAY_OF_MONTH, 8);
calendar.set(Calendar.MONTH, (5-1));
calendar.set(Calendar.YEAR, 2015);
timeInMills = calendar.getTimeInMillis() - 5 * (24*60*60*1000);
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
LocalDate
अधिक सरल और अधिक उपयुक्त है।
किसी ने Joda Time की सिफारिश की - मैं इस CalendarDate वर्ग http://calendardate.sourceforge.net का उपयोग कर रहा हूं
यह जोडा टाइम के लिए कुछ हद तक प्रतिस्पर्धी परियोजना है, लेकिन केवल 2 वर्गों में बहुत अधिक बुनियादी है। यह बहुत उपयोगी है और मुझे जो कुछ भी चाहिए, उसके लिए बहुत अच्छा काम किया क्योंकि मैं अपनी परियोजना से बड़े पैकेज का उपयोग नहीं करना चाहता था। जावा समकक्षों के विपरीत, इसकी सबसे छोटी इकाई दिन है इसलिए यह वास्तव में एक तारीख है (इसे मिलीसेकंड या कुछ नीचे करने के लिए नहीं)। एक बार जब आप तारीख बना लेते हैं, तो आप जो घटाते हैं वह कुछ ऐसा होता है जैसे 5 दिन वापस जाने के लिए myDay.addDays (-5)। आप इसका उपयोग सप्ताह के दिन और उस तरह की चीजों को खोजने के लिए कर सकते हैं। एक और उदाहरण:
CalendarDate someDay = new CalendarDate(2011, 10, 27);
CalendarDate someLaterDay = today.addDays(77);
तथा:
//print 4 previous days of the week and today
String dayLabel = "";
CalendarDate today = new CalendarDate(TimeZone.getDefault());
CalendarDateFormat cdf = new CalendarDateFormat("EEE");//day of the week like "Mon"
CalendarDate currDay = today.addDays(-4);
while(!currDay.isAfter(today)) {
dayLabel = cdf.format(currDay);
if (currDay.equals(today))
dayLabel = "Today";//print "Today" instead of the weekday name
System.out.println(dayLabel);
currDay = currDay.addDays(1);//go to next day
}
मेरा मानना है कि किसी भी समय इकाई (महीने, दिन, घंटे, मिनट, सेकंड, ...) को घटाव या इसके अलावा करने का एक अच्छा और अच्छा तरीका java.time.stant वर्ग का उपयोग करके प्राप्त किया जा सकता है ।
वर्तमान समय से 5 दिन घटाने और दिनांक के रूप में परिणाम प्राप्त करने के लिए उदाहरण:
new Date(Instant.now().minus(5, ChronoUnit.DAYS).toEpochMilli());
1 घंटा घटाने और 15 मिनट जोड़ने का एक और उदाहरण:
Date.from(Instant.now().minus(Duration.ofHours(1)).plus(Duration.ofMinutes(15)));
यदि आपको अधिक सटीकता की आवश्यकता है, तो इंस्टेंस ने नैनोसेकंड तक उपाय किया। नैनोसेकंड भाग में हेरफेर करने के तरीके:
minusNano()
plusNano()
getNano()
इसके अलावा, ध्यान रखें कि वह तारीख इंस्टेंट की तरह सटीक नहीं है।
Date.from(Instant.now().minus(5, ChronoUnit.DAYS))
एली कोर्टराइट दूसरा समाधान गलत है, यह होना चाहिए:
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());
addDays
; उसका समाधान सही है। यदि आप तिथि से दिनों को घटाना चाहते हैं, तो आप इसके लिए ऋणात्मक मान से गुजरते हैं days
।
java.util.Calendar
अब विरासत , java.time कक्षाओं द्वारा ली गई । ओरेकल द्वारा ट्यूटोरियल देखें ।