2017-06-27 17 views
-1

Ich habe ein Interval Objekt:Wie Datetime-Objekt verwenden, aufgeteilt Interval Objekt

Interval firstInterval = 
new Interval(new DateTime(2017,06,26,07,55,30),new DateTime(2017,06,26,22,55,30)); 

und:

DateTime nightToDay = new DateTime(2017, 06, 26, 8, 0, 0); 
DateTime dayToNight = new DateTime(2017, 06, 26, 22, 0, 0); 

ich ein Interval[] erhalten möchten:

[ 
[2017-06-26 07:55:30 ~ 2017-06-26 08:00:00], 
[2017-06-26 08:00:00 ~ 2017-06-26 22:00:00], 
[2017-06-26 22:00:00 ~ 2017-06-26 22:55:30] 
] 

Natürlich Diese Parameter sind nicht festgelegt, und es ist nur ein Beispiel.

+1

Sie sollten JDK 8 und das Zeitpaket verwenden, das Joda Time nachempfunden ist. – duffymo

+0

aber, die Projekte des Unternehmens, zum von jdk 7 zu verwenden – haisen

+0

Sagen Sie Ihrem Unternehmen, dass JDK 7 das Ende seiner Unterstützungslebenszeit bereits überschritten hat. Es ist schon lange vorbei, um zu aktualisieren. Sie verpassen Lambdas, Zeitpaket und viele andere Dinge. JDK 9 ist auf dem Weg. – duffymo

Antwort

0

Unter der Annahme, dass Ihr allgemeiner Fall ist:

  • einen ersten Intervall mit start und end
  • empfängt ein nightToDay und dayToNight Daten
  • Ausgang muss 3 Intervalle enthalten:
    1. start zu nightToDay
    2. nightToDay zu dayToNight
    3. dayToNight zu end

Und für jeden Fall oben, müssen Sie auch, wenn der Beginn des Intervalls vor dem Ende ist zu überprüfen. Wenn

das ist, was Sie brauchen, tun gerade:

List<Interval> list = new ArrayList<Interval>(); 
if (firstInterval.getStart().isBefore(nightToDay)) { 
    list.add(new Interval(firstInterval.getStart(), nightToDay)); 
} 
if (nightToDay.isBefore(dayToNight)) { 
    list.add(new Interval(nightToDay, dayToNight)); 
} 
if (dayToNight.isBefore(firstInterval.getEnd())) { 
    list.add(new Interval(dayToNight, firstInterval.getEnd())); 
} 

Die list enthält alle Interval Objekte, die Sie benötigen. Wenn Sie ein Array benötigen, ist es einfach, die Liste zu konvertieren:

Interval[] intervals = new Interval[list.size()]; 
intervals = list.toArray(intervals); 

Das intervals Array alle erstellten Intervalle haben.

+0

Die 'nightToDay' und 'dayToNight' liegen möglicherweise nicht zwischen '2017-06-26 07:55:30' und '2017-06-26 22:55:30' , So, ich weiß nicht, dass Ergebnis Länge – haisen

+0

Ich habe die Antwort aktualisiert –