Clojure:
Comparando duas datas

Como fazer:

;; Adicionando a dependência clj-time
(require '[clj-time.core :as time])
(require '[clj-time.format :as format])

;; Definindo datas para comparação
(def data1 (time/date-time 2021 10 5))
(def data2 (time/date-time 2022 10 5))

;; Comparando as datas
(time/before? data1 data2) ; => true
(time/after? data1 data2) ; => false
(time/equal? data1 data2) ; => false

;; Formatando e comparando strings de datas
(def formato-br "dd/MM/yyyy")
(def data-str1 "05/10/2021")
(def data-str2 "05/10/2022")

(def parsed-data1 (time/parse (format/formatters formato-br) data-str1))
(def parsed-data2 (time/parse (format/formatters formato-br) data-str2))

(time/before? parsed-data1 parsed-data2) ; => true

Aprofundamento:

Historicamente, a manipulação de datas em Clojure dependia de bibliotecas Java, como java.util.Date. Com o desenvolvimento de Clojure, surgiu a clj-time, uma biblioteca mais robusta, construída sobre a Joda-Time, que simplifica o trabalho com datas e horas.

Existem alternativas como o Java Time, que é parte do Java 8 e superior, requerendo menos dependências externas. No entanto, a clj-time ainda é amplamente usada por sua facilidade de uso na comunidade Clojure.

Detalhes de implementação importam. Comparar datas pode envolver zonas horárias e horário de verão. Use o UTC para consistência, a menos que contextos específicos exijam outro fuso. Além disso, ao comparar strings de datas, garantir que o formato esteja correto evita erros.

Veja Também: