5
Hier ist meine scala Fall Klasse Daterange:Holen Sie sich die Datumsbereiche mit Ausnahme der Nachspiel Timings
case class DateRange(startDT: DateTime, endDT: DateTime)
Die Probeneingangsdaten (Joda):
val dt1 = DateTime.parse("2016-01-04T03:00:00.000Z") // dt1 will always the range start date time
val dt2 = DateTime.parse("2016-01-05T04:00:00.000Z") // dt2 will always the range end date time
val dr = DateRange(dt1, dt2) // container to hold the date ranges
val st = LocalTime.parse("13:00:00") // st will always the stoppage start time
val et = LocalTime.parse("02:00:00") // et will always the stoppage end time
Ich versuche, das Ergebnis als List[DateRange]
zu erhalten Ausgenommen die Stop-Timing-Intervalle. Die Datumsbereiche und Zeitbereiche sind möglicherweise alles.
Wunsch Ausgang für die oben Eingangsdaten:
List(DateRange(2016-01-04T03:00:00.000Z,2016-01-04T13:00:00.000Z),DateRange(2016-01-05T02:00:00.000Z,2016-01-05T04:00:00.000Z))
ich so versucht:
val result = if (st.isBefore(et)) {
if (dr.startDT.isBefore(dr.endDT) && st.isAfter(dr.startDT.toLocalTime)) {
DateRange(dr.startDT.withTime(st), dr.startDT.withTime(et))
} else if (dr.startDT.isBefore(dr.endDT) && st.isBefore(dr.startDT.toLocalTime)) {
DateRange(dr.endDT.withTime(st), dr.endDT.withTime(et))
} else {
DateRange(dr.startDT.withTime(st), dr.startDT.withTime(et))
}
}
else {
if (dr.startDT.isBefore(dr.endDT) && et.isBefore(dr.endDT.toLocalTime) && st.isBefore(dr.endDT.toLocalTime)) {
DateRange(dr.startDT.withTime(st), dr.endDT.withTime(23, 59, 59, 999))
} else if (dr.startDT.isBefore(dr.endDT) && et.isBefore(dr.endDT.toLocalTime) && st.isAfter(dr.endDT.toLocalTime)) {
DateRange(dr.startDT, dr.endDT.withTime(et))
} else if (dr.startDT.isBefore(dr.endDT) && et.isBefore(dr.endDT.toLocalTime) && st.isAfter(dr.endDT.toLocalTime)) {
DateRange(dr.startDT, dr.endDT.withTime(et))
} else {
DateRange(dr.startDT.withTime(st), dr.endDT.withTime(et))
}
Wenn "st wird immer der Stillstand Startzeit" und "und wird immer die Stopp-Endzeit" wie kann st.isBefore (et) falsch sein? –
tldr finden Sie einen Weg, um es zu sortieren –
@AlexeyRomanov ... Stop-Startzeit kann bis zum Ende des Tages beginnen und Stop-End-Zeit kann am nächsten Morgen enden. – Jet