2009-07-23 7 views
12

私はJoda時間を持つ日付イテレータを成功裏に実装しようとしています。
私は、すべての日のフォームをstartDateからendDateまで繰り返すことができるようにする必要があります
これを行う方法はありますか?Java Joda Time - 日付範囲イテレータを実装する

+2

これはまったく役に立ちますか? http://stackoverflow.com/questions/847520/java-date-iterator-factory-with-rules-specifying-how-to-calculate-the-intervals – Davis

+2

日が必要な場合は、LocalDateクラス(あなたの開始日を1に設定)、それぞれの次の日数をプラスします。これにより、インスタントに固有のタイムゾーンの問題を回避できます。 – Yishai

答えて

28

ここから始めてみましょう。あなたは、それは私がJavaでイテレータを書いたので、しばらくだなど

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

私はJodaが "日付範囲"を表現するものを持っているかどうかを検索していました...どうやら、あなたは自分自身のLocalDateRangeを書くことを提案しているからです。 – Jonik

+0

@ Jonik JodaはIntervalインターフェイスとそのさまざまな実装を提供しています。しかし、私はIterableの実装を見つけることができませんでした:多分もっと複雑な... – Stephan

関連する問題