การแปลงวันที่เป็นสตริง

Clojure:
การแปลงวันที่เป็นสตริง

วิธีการ:

ใน Clojure เราใช้ความสามารถของการใช้งาน Java ร่วมกันเพื่อจัดรูปแบบวันที่ นี่คือคู่มืออย่างรวดเร็ว:

(import java.text.SimpleDateFormat)
(import java.util.Date)

;; สร้างวัตถุวันที่ (ใช้วันที่และเวลาปัจจุบัน)
(def now (Date.))

;; ตั้งค่ารูปแบบที่ต้องการ
(def formatter (SimpleDateFormat. "yyyy-MM-dd HH:mm:ss"))

;; จัดรูปแบบวันที่เป็นสตริง
(def formatted-date (.format formatter now))

;; พิมพ์ออกมา
(println formatted-date)
;; ผลลัพธ์อาจเป็น: "2023-03-15 09:26:45" (ขึ้นอยู่กับวันที่และเวลาปัจจุบัน)

การศึกษาลึก

การแปลงวันที่เป็นสตริงไม่ได้จำกัดอยู่กับ Clojure เท่านั้น มันเป็นการดำเนินการทั่วไปในภาษาโปรแกรมหลายภาษา ในอดีตความต้องการนี้เกิดขึ้นเมื่อคอมพิวเตอร์เริ่มจัดการกับวันที่เพราะการมีตัวแทนที่มนุษย์สามารถอ่านได้ทำให้เข้าใจและสื่อสารได้ง่ายขึ้น ในขณะที่เครื่องจักรชอบรูปแบบข้อมูลที่มีโครงสร้างมากกว่า

ใน Clojure เพราะว่ามันทำงานบน Java Virtual Machine (JVM) เรามักใช้ไลบรารีวันที่และเวลาของ Java เช่น java.util.Date และ java.text.SimpleDateFormat แม้ว่าคลาสเหล่านี้จะมีมานานแล้ว แต่กระบวนการใหม่ java.time ที่ถูกนำมาใช้ใน Java 8 นั้นเป็นทางเลือกที่ดีขึ้นด้วยความปลอดภัยสำหรับเธรดและ API ที่ใช้งานง่ายกว่า

Clojure ไม่มีไลบรารีการจัดรูปแบบวันที่ที่เป็นส่วนหนึ่งของภาษาหลัก ดังนั้นมันจึงเป็นเรื่องปกติที่จะใช้การทำงานร่วมกับ Java หรือไลบรารีจากบุคคลที่สาม เช่น clj-time (เป็น wrapper ของ Joda Time) สำหรับการใช้งาน Clojure ที่ธรรมชาติมากขึ้น

นี่คือวิธีที่คุณอาจใช้ java.time เพื่อจัดรูปแบบ:

(import java.time.LocalDateTime)
(import java.time.format.DateTimeFormatter)

;; สร้างวัตถุวันที่ (วันที่และเวลาปัจจุบัน)
(def now (LocalDateTime/now))

;; ตั้งค่ารูปแบบที่ต้องการ
(def formatter (DateTimeFormatter/ofPattern "yyyy-MM-dd HH:mm:ss"))

;; จัดรูปแบบวันที่เป็นสตริง
(def formatted-date (.format now formatter))

;; พิมพ์ออกมา
(println formatted-date)
;; ผลลัพธ์คล้ายกับก่อนหน้านี้ ใช่วันที่และเวลาปัจจุบัน

วิธีนี้หลีกเลี่ยงปัญหาเรื่องการเปลี่ยนแปลงที่เกิดขึ้นกับ SimpleDateFormat และควรจะได้รับการพิจารณาในโค้ดใหม่ที่ความปลอดภัยของเธรดเป็นเรื่องสำคัญ

ดูเพิ่มเติม