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
clj-time
GitHub-sivusto: https://github.com/clj-time/clj-time- Java 8
java.time
dokumentaatio: https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html - Joda-Time projekti: http://www.joda.org/joda-time/
Nämä materiaalit auttavat syventämään ymmärrystä päivämäärien käsittelystä Clojuressa.