Here is my scala DateRange class class:
case class DateRange(startDT: DateTime, endDT: DateTime)
Sample Input (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
I am trying to get the result as List[DateRange] except for the stop time intervals. Date ranges and time intervals can be anything.
Required output for the above input:
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))
I tried like this:
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)) }
source share