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
เป็นตัวเลือกที่แข็งแกร่ง