diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/util/DateUtils.java b/duniter4j-core-shared/src/main/java/org/duniter/core/util/DateUtils.java
index 46daf36648fcee4560d3c6abe3b054579c4f4ecd..7ee5233222eeb9dad98b9a56806fccc76837a4b0 100644
--- a/duniter4j-core-shared/src/main/java/org/duniter/core/util/DateUtils.java
+++ b/duniter4j-core-shared/src/main/java/org/duniter/core/util/DateUtils.java
@@ -85,4 +85,24 @@ public class DateUtils {
         return nextDayAndHour(dayOfTheWeek, hour).getTime() - System.currentTimeMillis();
     }
 
+    public static String elapsedTime(long timeInMs) {
+        long elapsedTime = System.currentTimeMillis() - timeInMs;
+        StringBuilder sb = new StringBuilder();
+        sb.append("in ");
+        if (elapsedTime < 1000) {
+            return sb.append(elapsedTime).append("ms").toString();
+        }
+        double seconds = (double) elapsedTime / 1_000;
+        if (seconds < 60) {
+            return sb.append(seconds).append("s").toString();
+        }
+        int minutesFloor = (int) Math.floor(seconds / 60);
+        int secondsFloor = (int) Math.floor(seconds - minutesFloor * 60);
+        int millis = (int) Math.floor((seconds - secondsFloor - minutesFloor * 60) * 1_000);
+
+        return sb.append(minutesFloor).append("min ")
+            .append(secondsFloor).append("s ")
+            .append(millis).append("ms")
+            .toString();
+    }
 }