From befa4e9bbf07fc4c2511291d20acb4a70dbeca54 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Mon, 15 Feb 2021 19:09:45 +0100 Subject: [PATCH] OO-5295: calculate time in long/milliseconds to prevent rounding errors --- .../olat/course/nodes/iq/EndTimeCellRenderer.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/iq/EndTimeCellRenderer.java b/src/main/java/org/olat/course/nodes/iq/EndTimeCellRenderer.java index 2facab1d341..4a96a4eeac5 100644 --- a/src/main/java/org/olat/course/nodes/iq/EndTimeCellRenderer.java +++ b/src/main/java/org/olat/course/nodes/iq/EndTimeCellRenderer.java @@ -58,28 +58,27 @@ public class EndTimeCellRenderer implements FlexiCellRenderer { Integer compensationExtraTimeInSeconds = infos.getCompensationExtraTimeInSeconds(); if(infos.getStart() != null) { - int totalTime = timeLimitInSeconds; + long totalTimeMs = timeLimitInSeconds * 1000l; if(endDate != null) { - long leadingTimeInMilliSeconds = endDate.getTime() - infos.getStart().getTime(); - int leadingTime = Math.round(leadingTimeInMilliSeconds / 1000f); + long leadingTimeInMs = endDate.getTime() - infos.getStart().getTime(); if(timeLimitInSeconds > 0) { - totalTime = Math.min(totalTime, leadingTime); + totalTimeMs = Math.min(totalTimeMs, leadingTimeInMs); } else { - totalTime = leadingTime; + totalTimeMs = leadingTimeInMs; } } if(extraTimeInSeconds != null) { - totalTime += extraTimeInSeconds; + totalTimeMs += (extraTimeInSeconds * 1000l); } if(compensationExtraTimeInSeconds != null) { - totalTime += compensationExtraTimeInSeconds; + totalTimeMs += (compensationExtraTimeInSeconds * 1000l); } Calendar now = Calendar.getInstance(); Calendar cal = Calendar.getInstance(); cal.setTime(infos.getStart()); - cal.add(Calendar.SECOND, totalTime); + cal.add(Calendar.MILLISECOND, (int)totalTimeMs); Date dueDate = cal.getTime(); boolean sameDay = now.get(Calendar.YEAR) == cal.get(Calendar.YEAR) -- GitLab