2012-10-04 21 views
8

पर सप्ताहांत जोड़ें 0 सप्ताह के समय में सप्ताहांत जोड़ना संभव है?जोडा समय -

उदाहरण के लिए, यदि वर्तमान दिनांक शुक्रवार 01/03 है, दिनांक + 1 02/03 के बजाय सोमवार 04/03 को वापस लौटना चाहिए।

उत्तर

8

जहां तक ​​मुझे पता है कि जोडा समय में आपके लिए स्वचालित रूप से ऐसा करने के लिए कोई अंतर्निहित विधि नहीं है। हालांकि, आप अपनी खुद की विधि लिख सकते हैं, जो एक लूप में तारीख को तब तक बढ़ाता है जब तक कि आप सप्ताहांत तक नहीं पहुंच जाते।

ध्यान दें कि, इसके लिए आपको इसकी आवश्यकता के आधार पर, यह आपके विचार से कहीं अधिक जटिल हो सकता है। उदाहरण के लिए, क्या छुट्टियां भी छोड़नी चाहिए? कौन से दिन छुट्टियां इस देश पर निर्भर करती हैं कि आप किस देश में हैं। इसके अलावा, कुछ देशों में (उदाहरण के लिए, अरबी देश) सप्ताहांत गुरुवार और शुक्रवार को शनिवार और रविवार को नहीं है।

+0

मैं समझता हूँ कि छुट्टियों छोड़ी नहीं जा सकता है, लेकिन यह कोई मुद्दा नहीं है: यह कहां है, मैं बाहर काम कर कितने सप्ताह और दिनों आप को समायोजित करने के द्वारा की जरूरत से जोड़ने के संचालन को कम करने की सलाह देते हैं। आप एक सप्ताह के बीटीडब्ल्यू के लिए कैसे जांचते हैं? मैं YearMonthDay ऑब्जेक्ट्स का उपयोग कर रहा हूं – Bober02

+0

सबसे पहले, ध्यान दें कि 'YearMonthDay' को बहिष्कृत किया गया है, आपको इसके बजाय 'LocalDate' का उपयोग करना चाहिए। आप ''DDDDD'' को 'लोकलडेट' के निर्माता को पास कर सकते हैं। उस वर्ग में एक तरीका है 'getDayOfWeek()' जो सप्ताह के दिन (0 = रविवार, 1 = सोमवार, ..., 6 = शनिवार) देता है। – Jesper

+2

जोडाटाइम विनिर्देश 1 के अनुसार सोमवार और 7 रविवार है। क्या आप निश्चित रूप से रविवार के लिए 0 काम भी करते हैं? स्रोत: http://joda-time.sourceforge.net/apidocs/org/joda/time/Chronology.html#dayOfWeek() – user1581900

-4

कक्षा YearMonthDay बहिष्कृत है और आपको इसका उपयोग नहीं करना चाहिए। आप साधारण दिनांक समय को बदलते हैं तो आपको कॉल करके सप्ताह दिन प्राप्त कर सकते हैं:

dateTime.getDayOfWeek(); 

शुक्रवार के लिए यह हो जाएगा 5.

तरीकों में से एक एक कस्टम addDays विधि है जो कि कुछ ऐसा दिखाई देगा बनाने जा सकती है :

addDays(DateTime dateTime, int days) { 
    for(int i=0;i<days;i++){ 
     dateTime.plusDays(1); 
     if(dateTime.getDayOfWeek()==6) dateTime.plusDays(2); // if Saturday add 2 more days } 
} 
+0

आपका उदाहरण अधूरा है, अगर शनिवार है तो क्या होगा? साथ ही, 'लोकलडेट' 'डेटटाइम' की तुलना में' वर्षमोनेडे 'के लिए एक अधिक सटीक प्रतिस्थापन है। – Jesper

+0

मुझे कभी नहीं पता था कि मुझे समस्याओं का पूरा समाधान देने के लिए बाध्य किया गया है। मैंने माना कि ओपी केवल कामकाजी दिनों के साथ काम करता है, इसलिए यह संभावना नहीं होगी कि वह शनिवार या रविवार को गुजरता है। मैंने यह भी माना कि वह अपने आप को बाकी हिस्सों को समझने के लिए काफी समझदार है ... दूसरी तरफ मैंने कभी पहले जोडाटाइम से निपटाया नहीं है और आपके जैसे ही मैंने जवाब दिया है ... – user1581900

+4

सावधान रहें कि यह दृष्टिकोण ' डेटटाइम 'ऑब्जेक्ट, जो कोई संभावना नहीं है क्योंकि' डेटटाइम 'ऑब्जेक्ट्स अपरिवर्तनीय हैं। आपको प्रत्येक पुनरावृत्ति के लिए एक नया उदाहरण बनाना होगा और अंतिम एक को वापस करना होगा, यानी 'dateTime = dateTime.plusDays (1); ... वापसी की तारीख समय; '। – benjamin

4
LocalDate newDate = new LocalDate(); 
int i=0; 
while(i<days)//days == as many days as u want too 
{ 
    newDate = newDate.plusDays(1);//here even sat and sun are added 
    //but at the end it goes to the correct week day. 
    //because i is only increased if it is week day 
    if(newDate.getDayOfWeek()<=5) 
    { 
     i++; 
    } 

} 
System.out.println("new date"+newDate); 
+0

धन्यवाद। इससे बहुत मदद मिली। –

1

पता है कि एक समय में जोड़ने एन दिनों के माध्यम से एक पुनरावृत्ति अपेक्षाकृत महंगा हो सकता है हो सकता है। एन और/या गैर प्रदर्शन संवेदनशील कोड के छोटे मानों के लिए, यह शायद कोई मुद्दा नहीं है।

/** 
* Returns the date that is {@code n} weekdays after the specified date. 
* <p> 
* Weekdays are Monday through Friday. 
* <p> 
* If {@code date} is a weekend, 1 weekday after is Monday. 
*/ 
public static LocalDate weekdaysAfter(int n, LocalDate date) { 
    if (n == 0) 
     return date; 
    if (n < 0) 
     return weekdaysBefore(-n, date); 
    LocalDate newDate = date; 
    int dow = date.getDayOfWeek(); 
    if (dow >= DateTimeConstants.SATURDAY) { 
     newDate = date.plusDays(8 - dow); 
     n--; 
    } 
    int nWeeks = n/5; 
    int nDays = n % 5; 
    newDate = newDate.plusWeeks(nWeeks); 
    return ((newDate.getDayOfWeek() + nDays) > DateTimeConstants.FRIDAY) 
      ? newDate.plusDays(nDays + 2) 
      : newDate.plusDays(nDays); 
संबंधित मुद्दे