Clojure:
Kahden päivämäärän vertailu

How to:

Clojuren clj-time kirjasto on kätevä päivämäärävertailuihin:

(require '[clj-time.core :as time])
(require '[clj-time.coerce :as coerce])

(let [date1 (coerce/to-date-time "2021-01-01T12:00:00.000Z")
      date2 (coerce/to-date-time "2021-12-31T16:00:00.000Z")]
  {:before (time/before? date1 date2)
   :after  (time/after? date1 date2)
   :equal  (time/equal? date1 date2)})

Tuloste:

{:before true, :after false, :equal false}

Deep Dive

Alun perin Clojure-kielessä päivämäärien käsittely oli java.util.Date-luokan varassa. clj-time perustuu Joda-Time-kirjastoon, joka on vanhan java.util.Date-luokan parempi versio. Jos clj-time ei ole käytössä, voi käyttää myös java.time-kirjastoa:

java.time-esimerkki:

(import java.time.ZonedDateTime)

(defn compare-dates [date1-str date2-str]
  (let [date1 (ZonedDateTime/parse date1-str)
        date2 (ZonedDateTime/parse date2-str)]
    (cond
      (.isBefore date1 date2) "date1 is before date2"
      (.isAfter date1 date2)  "date1 is after date2"
      :else "dates are equal")))

(compare-dates "2021-01-01T12:00:00Z" "2021-12-31T16:00:00Z")

Tuloste:

"date1 is before date2"

Verrattuna Joda-Timeen java.time on osa Java 8:aa ja sitä uudempia versioita.

Päivämäärien vertailu voi tuntua suoraviivaiselta, mutta aikavyöhykkeet ja kesäaikaan siirtyminen tekevät siitä monimutkaista. On tärkeää valita oikea kirjasto, joka käsittelee nämä yksityiskohdat.

See Also

Nämä materiaalit auttavat syventämään ymmärrystä päivämäärien käsittelystä Clojuressa.