เปรียบเทียบสองวันที่

Clojure:
เปรียบเทียบสองวันที่

วิธีการ:

Clojure ใช้ความสามารถในการร่วมมือกันของ Java เพื่อจัดการกับวันที่ มาพับแขนเสื้อขึ้นแล้วดำดิ่งเข้าไป:

;; นำเข้าคลาส Date ของ Java
(import java.util.Date)

;; สร้างสองอินสแตนซ์ของวันที่
(def date1 (java.util.Date.))
(Thread/sleep 1000) ;; รอสักครู่
(def date2 (java.util.Date.))

;; เปรียบเทียบวันที่
(println (.before date1 date2)) ; true, date1 อยู่ก่อน date2
(println (.after date1 date2))  ; false, date1 ไม่อยู่หลังจาก date2
(println (.equals date1 date2)) ; false, date1 ไม่เหมือนกับ date2

ผลลัพธ์ตัวอย่างอาจดูแบบนี้ แต่มีเวลาที่แตกต่างกัน:

true
false
false

การศึกษาลึก

ในอดีต นักพัฒนา Clojure มักใช้ Date ของ Java สำหรับการดำเนินการวันที่ โดยเรียกเมทอดต่าง ๆ ผ่านตัวดำเนินการจุดเหมือนที่เห็นก่อนหน้า ตัวเลือกทางเลือก ได้แก่ clj-time, ไลบรารี Clojure ที่ห่อหุ้ม Joda-Time

ตัวอย่างที่ใช้ clj-time จะดูเช่นนี้:

;; เพิ่ม clj-time ลงใน dependency ของโปรเจกต์ของคุณ
(require '[clj-time.core :as time])
(require '[clj-time.coerce :as coerce])

;; สร้างสองอินสแตนซ์ของ date-time
(def date-time1 (time/now))
(Thread/sleep 1000) ;; รอหนึ่งวินาที
(def date-time2 (time/now))

;; เปรียบเทียบโดยใช้ฟังก์ชั่นของ clj-time
(println (time/before? date-time1 date-time2)) ; true
(println (time/after? date-time1 date-time2))  ; false
(println (time/equal? date-time1 date-time2))  ; false

มุมมองของ Clojure ต่อเวลาคือการใช้ประโยชน์จากไลบรารีของ Java ขณะที่ clj-time ร่วมมือกับ Joda-Time เพื่อสร้างประสบการณ์ Clojure ที่เหมาะสมมากยิ่งขึ้น

นับตั้งแต่ Java 8, java.time package—ซึ่งได้รับแรงบันดาลใจจาก Joda-Time—เป็นวิธีที่ต้องการในการจัดการกับวันที่และเวลาใน Java และโดยการขยาย, ใน Clojure ผ่าน interop การออกแบบที่ปรับปรุงและความสามารถเพิ่มเติมเช่นโซนเวลาทำให้ java.time เป็นตัวเลือกที่แข็งแกร่ง

ดูเพิ่มเติม