2009-07-23 22 views
12

लागू करें मैं सफलता के बिना जोडा समय के साथ दिनांक पुनरावर्तक को कार्यान्वित करने की कोशिश कर रहा हूं।
मुझे कुछ ऐसा चाहिए जो मुझे सभी दिनों के फॉर्म को फिर से शुरू करने की अनुमति देता है दिनांक समाप्त करने के लिए दिनांक
क्या आपको ऐसा करने का कोई विचार है?जावा जोडा समय - एक तिथि सीमा इटरेटर

+2

यह मदद बिल्कुल है? http://stackoverflow.com/questions/847520/java-date-iterator-factory-with-rules-specifying-how-to-calculate-the-intervals – Davis

+2

यदि आप दिन चाहते हैं, तो आप स्थानीयडेट कक्षा को देखना चाहते हैं (अपनी प्रारंभ तिथि के रूप में सेट करें) और प्रत्येक के लिए एक प्लस दिन करें। यह तत्काल में अंतर्निहित टाइमज़ोन मुद्दों से बच जाएगा। – Yishai

उत्तर

28

यहां शुरू करने के लिए कुछ है। आप के बारे में है कि क्या आप यह समावेशी या अंत में अनन्य होना चाहता हूँ सोचने के लिए, आदि

import org.joda.time.*; 
import java.util.*; 

class LocalDateRange implements Iterable<LocalDate> 
{ 
    private final LocalDate start; 
    private final LocalDate end; 

    public LocalDateRange(LocalDate start, 
          LocalDate end) 
    { 
     this.start = start; 
     this.end = end; 
    } 

    public Iterator<LocalDate> iterator() 
    { 
     return new LocalDateRangeIterator(start, end); 
    } 

    private static class LocalDateRangeIterator implements Iterator<LocalDate> 
    { 
     private LocalDate current; 
     private final LocalDate end; 

     private LocalDateRangeIterator(LocalDate start, 
             LocalDate end) 
     { 
      this.current = start; 
      this.end = end; 
     } 

     public boolean hasNext() 
     { 
      return current != null; 
     } 

     public LocalDate next() 
     { 
      if (current == null) 
      { 
       throw new NoSuchElementException(); 
      } 
      LocalDate ret = current; 
      current = current.plusDays(1); 
      if (current.compareTo(end) > 0) 
      { 
       current = null; 
      } 
      return ret; 
     } 

     public void remove() 
     { 
      throw new UnsupportedOperationException(); 
     } 
    } 
} 

class Test 
{ 
    public static void main(String args[]) 
    { 
     LocalDate start = new LocalDate(2009, 7, 20); 
     LocalDate end = new LocalDate(2009, 8, 3); 
     for (LocalDate date : new LocalDateRange(start, end)) 
     { 
      System.out.println(date); 
     } 
    } 
} 

थोड़ा समय है, क्योंकि मैं जावा में एक इटरेटर लिखा है चाहते हो सकता है, तो मैं आशा यह सही है। मुझे लगता है कि यह काफी ठीक है ...

सी # इटरेटर ब्लॉकों के लिए ओह, यह सब मैं कह सकता है ...

+0

धन्यवाद, इसने मेरी जिंदगी कम से कम 900% आसान बना दी है। –

+0

मैं जा रहा था कि जोडा के पास "डेट रेंज" का प्रतिनिधित्व करने के लिए कुछ है या नहीं ... जाहिर है, क्योंकि आप किसी के अपने स्थानीयडेट्रेंज को लिखने का प्रस्ताव नहीं देते हैं। – Jonik

+0

@ जोनिक जोडा अंतराल इंटरफ़ेस और इसके विभिन्न कार्यान्वयन प्रदान करता है। हालांकि मैं 'Iterable' कार्यान्वयन नहीं ढूंढ पाया: शायद अधिक जटिल ... – Stephan

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