java - जावा कैलेंडर का उपयोग कर तारीख से एक्स दिन कैसे घटाना है?




calendar subtraction (6)

tl; डॉ

LocalDate.now().minusDays( 10 )

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

LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )

विवरण

जावा के शुरुआती संस्करणों के साथ बंडल की गई पुराने डेट-टाइम कक्षाएं, जैसे java.util.Date / .Calendar , परेशानी, भ्रमित और त्रुटिपूर्ण साबित हुई हैं। उनसे बचें।

java.time

जावा 8 और बाद में उन पुराने वर्गों को नए जावा.टाइम फ्रेमवर्क के साथ सप्लांट करता है। Tutorial देखें। Joda-Time द्वारा प्रेरित जेएसआर 310 द्वारा परिभाषित, और ThreeTen-Extra प्रोजेक्ट द्वारा विस्तारित किया गया। थ्रीटेन-बैकपोर्ट प्रोजेक्ट कक्षाओं को जावा 6 और 7 में बैक-पोर्ट करता है; Android के लिए ThreeTenABP परियोजना।

प्रश्न अस्पष्ट है, स्पष्ट नहीं है कि क्या यह केवल दिनांक या तारीख-समय के लिए पूछता है।

LocalDate

केवल दिनांक के लिए, बिना दिन के, LocalDate कक्षा का उपयोग करें। ध्यान दें कि "आज" जैसी तारीख निर्धारित करने में महत्वपूर्ण समय क्षेत्र।

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
LocalDate tenDaysAgo = today.minusDays( 10 );

ZonedDateTime

यदि आपका डेट-टाइम का मतलब है, तो UTC में टाइमलाइन पर एक पल पाने के लिए 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 और बाद में बनाया गया है। ये कक्षाएं परेशानी पुरानी legacy दिनांक-समय कक्षाओं जैसे java.util.Date , Calendar , और SimpleDateFormat

Joda-Time प्रोजेक्ट, अब रखरखाव मोड में , java.time कक्षाओं में माइग्रेशन की सलाह देता है।

अधिक जानने के लिए, Tutorial देखें। और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता जेएसआर 310 है

आप सीधे अपने डेटाबेस के साथ java.time ऑब्जेक्ट्स का आदान-प्रदान कर सकते हैं। जेडीबीसी 4.2 या बाद में एक जेडीबीसी ड्राइवर का अनुपालन करें। तारों की कोई ज़रूरत नहीं है, java.sql.* कक्षाओं की आवश्यकता नहीं है।

जावा.टाइम कक्षाएं कहां प्राप्त करें?

  • जावा एसई 8 , जावा एसई 9 , जावा एसई 10 , और बाद में
    • निर्मित।
    • एक बंडल कार्यान्वयन के साथ मानक जावा एपीआई का हिस्सा।
    • जावा 9 कुछ मामूली विशेषताओं और फिक्सेस जोड़ता है।
  • जावा एसई 6 और जावा एसई 7
    • जावाटाइम की अधिकांश कार्यक्षमता को ThreeTen-Backport में जावा 6 और 7 में बैक-पोर्ट किया गया है।
  • Android
    • जावा.टाइम कक्षाओं के एंड्रॉइड बंडल कार्यान्वयन के बाद के संस्करण।
    • पहले एंड्रॉइड (<26) के लिए, ThreeTenABP प्रोजेक्ट थ्रीटेन-बैकपोर्ट (ऊपर उल्लिखित) को अपनाने वाला है । देखें थ्रीटेबैप का उपयोग कैसे करें ...।

ThreeTen-Extra प्रोजेक्ट अतिरिक्त कक्षाओं के साथ जावा.टाइम बढ़ाता है। यह परियोजना java.time के संभावित भविष्य के जोड़ों के लिए एक सिद्ध भूमि है। आपको यहां कुछ उपयोगी कक्षाएं मिल सकती हैं जैसे Interval , YearWeek , YearQuarter , more

https://code.i-harness.com

किसी भी तारीख से एक्स दिनों को घटाने के लिए जावा कैलेंडर का उपयोग करके कोई आसान तरीका पता है?

मैं कोई भी फ़ंक्शन नहीं ढूंढ पा रहा हूं जो मुझे जावा में किसी तारीख से X दिन को सीधे घटाने की अनुमति देता है। क्या कोई मुझे सही दिशा में इंगित कर सकता है?


आप 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 वस्तु को बदल दिया गया है। वांछित अगर इसे किसी अन्य तरीके से करने के लिए आसानी से बदल दिया जा सकता है।


एली कोर्टवाइट दूसरा समाधान गलत है, यह होना चाहिए:

Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());

एली द्वारा सुझाए गए अपने स्वयं के addDays लिखने के बजाय, मैं अपाचे से DateUtils का उपयोग करना पसंद करूंगा। यह आसान है, खासकर जब आपको इसे अपने प्रोजेक्ट में कई स्थानों का उपयोग करना होगा।

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

addDays(Date date, int amount)

एक नई वस्तु लौटने की तारीख में कई दिन जोड़ता है।

ध्यान दें कि यह एक नई Date वस्तु देता है और पिछले एक में परिवर्तन नहीं करता है।


एन्सन का जवाब सरल मामले के लिए ठीक काम करेगा, लेकिन यदि आप कोई और जटिल तारीख गणना करने जा रहे हैं तो मैं जोडा समय की जांच करने की सिफारिश करता हूं। यह आपके जीवन को अधिक आसान बना देगा।

जोडा समय में एफवाईआई आप कर सकते हैं

DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);

यहां दस्तावेज़ों से लिया गया:

कैलेंडर के नियमों के आधार पर निर्दिष्ट कैलेंडर फ़ील्ड में निर्दिष्ट समय को जोड़ता या घटाता है। उदाहरण के लिए, कैलेंडर के वर्तमान समय से 5 दिन घटाना, आप इसे कॉल करके प्राप्त कर सकते हैं:

Calendar calendar = Calendar.getInstance(); // this would default to now
calendar.add(Calendar.DAY_OF_MONTH, -5).





subtraction