public long getTime() { CompactCalendar minimum = null, maximum = null; long totalTimeMilliSeconds = 0; List<P> positions = getPositions(); P previous = null; for (P next : positions) { if (previous != null) { Long time = previous.calculateTime(next); if (time != null && time > 0) totalTimeMilliSeconds += time; } CompactCalendar calendar = next.getTime(); if (calendar == null) continue; if (minimum == null || calendar.before(minimum)) minimum = calendar; if (maximum == null || calendar.after(maximum)) maximum = calendar; previous = next; } long maxMinusMin = minimum != null ? maximum.getTimeInMillis() - minimum.getTimeInMillis() : 0; return max(maxMinusMin, totalTimeMilliSeconds); }