2012-02-16 14 views
7

में दिनांक सीमाएं उत्पन्न करें मुझे यह जांचने की आवश्यकता है कि सरणी सूची में कोई दिनांक (स्ट्रिंग में) मौजूद है या नहीं।जोडाटाइम

मेरे पास दो तिथियां हैं, सबसे पहले मुझे इन दो तिथियों के बीच दिनांक सीमाएं उत्पन्न करने और उन्हें एक ऐरे में स्टोर करने की आवश्यकता है। मैं यही कर रहा हूँ।

DateTimeFormatter dateFromatter= DateTimeFormat.forPattern("MM/dd/yyyy"); 

DateTime startDate= formatter.parseDateTime("01/02/2012"); 
DateTime endDate= formatter.parseDateTime("01/31/2012"); 

List<LocalDate> dates = new ArrayList<LocalDate>(); 


    int days = Days.daysBetween(startDate, endDate).getDays(); 
    for (int i=0; i < days; i++) { 

यह वह जगह है जहां मुझे समस्या हो रही है।

Type mismatch: cannot convert from DateTime to LocalDate 

> LocalDate listOfDates = 
> startDate.withFieldAdded(DurationFieldType.days(), i); 
> dates.add(listOfDates); 

    } 

उत्तर

11

उपयोग org.joda.time.Interval

Interval interval = new Interval(startDate, endDate); 
for (LocalDate date : dates) 
{ 
    if (interval.contains(date)) 
    // 
+2

यह गलत है क्योंकि लोकलडेट 'डेट' केवल एक पठनीय पर्तनीय है जिसे पठनीय इंस्टेंट नहीं है। आप _could_ स्टार्टडेट और एंडडेट (जो डेटटाइम हैं) का उपयोग करके एक अंतराल बनाते हैं और तब परीक्षण करते हैं कि date.toDateMidnight() अंतराल में है, लेकिन अंतराल के साथ सावधान रहें क्योंकि यह अंतराल में अनन्य है। –

4

toLocalDate() काम नहीं है?

LocalDate listOfDates = 
    startDate.withFieldAdded(DurationFieldType.days(), i).toLocalDate(); 

वैसे भी, क्या आपको वास्तव में प्रत्येक तारीख उत्पन्न करने की आवश्यकता है? मैं यहाँ इस की तलाश में आया था

Interval interval = new Interval(startDate.withTimeAsStartOfDay(), 
           endDate.withTimeAsStartOfDay().plusDays(1)); 
boolean isInInterval = interval.contains(date.withTimeAsStartOfDay()); 
2

, लेकिन न तो समाधान करने के लिए स्वीकार्य थे: जब तक मैं वास्तव में, मैं सिर्फ इस के समान कुछ करना होगा की जरूरत है मुझे - मैं निम्नलिखित के साथ समाप्त हो गया:

मन में
int days = Days.daysBetween(startDate, endDate).getDays(); 

for(int i = 0; i <= days; i++) { 
    dates.add(startDate.plusDays(i)); 
} 

भालू ताकि आप वास्तव में यह नहीं बदल रहे हैं जब आप plusDays (...) फोन है कि LocalDates अपरिवर्तनीय हैं। यह भी ध्यान दें कि मैं अंतिम दिन शामिल करने के लिए < = का उपयोग करता हूं (आपके उदाहरण में यह 31 जनवरी होगा)।

संबंधित मुद्दे