From 686cacd5ae298268f67079b43026807d666c7c07 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Wed, 26 Jan 2022 18:10:47 +0100 Subject: [PATCH] :sparkles: Add truncate function to time ns on backend. --- backend/src/app/util/time.clj | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/backend/src/app/util/time.clj b/backend/src/app/util/time.clj index 9d5d3d4d75..ed8f809e06 100644 --- a/backend/src/app/util/time.clj +++ b/backend/src/app/util/time.clj @@ -17,6 +17,8 @@ java.time.ZonedDateTime java.time.format.DateTimeFormatter java.time.temporal.TemporalAmount + java.time.temporal.TemporalUnit + java.time.temporal.ChronoUnit java.util.Date org.apache.logging.log4j.core.util.CronExpression)) @@ -54,15 +56,30 @@ :else (obj->duration ms-or-obj))) -(defn duration-between - {:deprecated true} - [t1 t2] - (Duration/between t1 t2)) - (defn diff [t1 t2] (Duration/between t1 t2)) +(defn truncate + [o unit] + (let [unit (if (instance? TemporalUnit unit) + unit + (case unit + :nanos ChronoUnit/NANOS + :millis ChronoUnit/MILLIS + :micros ChronoUnit/MICROS + :seconds ChronoUnit/SECONDS + :minutes ChronoUnit/MINUTES))] + (cond + (instance? Instant o) + (.truncatedTo ^Instant o ^TemporalUnit unit) + + (instance? Duration o) + (.truncatedTo ^Duration o ^TemporalUnit unit) + + :else + (throw (IllegalArgumentException. "only instant and duration allowed"))))) + (s/def ::duration (s/conformer (fn [v]