Ich versuche, ohne Erfolg einen Date Iterator mit Joda Zeit zu implementieren.
Ich brauche etwas, mit dem ich alle Tage Iterieren kann form startDate to endDate
Haben Sie eine Idee, wie Sie das tun?Java Joda Time - Implementieren Sie einen Datumsbereich Iterator
Antwort
Hier ist etwas, um loszulegen. Sie können darüber nachdenken, ob Sie es wollen am Ende inklusive oder exklusive sein usw.
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);
}
}
}
Es ist eine Weile her, seit ich einen Iterator in Java geschrieben habe, so dass ich Hoffnung es ist richtig. Ich denke, es ist ziemlich okay ...
Oh für C# Iterator Blöcke, das ist alles was ich sagen kann ...
Danke, das hat mein Leben um mindestens 900% einfacher gemacht. –
Ich habe gegoogelt, ob Joda etwas hat, das einen "Datumsbereich" repräsentiert ... Anscheinend nicht, da Sie vorschlagen, den eigenen LocalDateRange zu schreiben. – Jonik
@Jonik Joda bietet die Interval-Schnittstelle und ihre verschiedenen Implementierungen. Ich konnte jedoch keine "iterable" Implementierung finden: vielleicht komplexer ... – Stephan
Diese Hilfe überhaupt? http://stackoverflow.com/questions/847520/java-date-iterator-factory-with-rules-specifying-how-to-calculate-the-intervals – Davis
Wenn Sie Tage möchten, möchten Sie sich die LocalDate-Klasse ansehen (setze eins als Startdatum ein) und mache ein Plus für jeden nächsten Tag. Dies vermeidet die Zeitzonenprobleme von Instant. – Yishai