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