Haskell:
เปรียบเทียบสองวันที่
วิธีการ:
Haskell ซึ่งเป็นที่รู้จักในด้านความบริสุทธิ์, ต้องการให้คุณพูดภาษาเกี่ยวกับวันที่ด้วยไลบรารีที่ถูกต้อง ลองใช้ Data.Time
import Data.Time
-- กำหนดวันที่สองวัน
date1 :: UTCTime
date1 = UTCTime (fromGregorian 2023 4 1) (secondsToDiffTime 0)
date2 :: UTCTime
date2 = UTCTime (fromGregorian 2024 4 2) (secondsToDiffTime 3600)
-- เปรียบเทียบวันที่
compareDates :: UTCTime -> UTCTime -> Ordering
compareDates = compare
main :: IO ()
main = do
print $ date1 `compareDates` date2 -- ผลลัพธ์จะเป็น LT
print $ date2 `compareDates` date1 -- ผลลัพธ์จะเป็น GT
print $ date1 `compareDates` date1 -- ผลลัพธ์จะเป็น EQตรงไปตรงมาเลยใช่ไหม? LT สำหรับน้อยกว่า, GT สำหรับมากกว่า, และ EQ สำหรับเท่ากัน
ภาพรวม
ในอดีต, การจัดการเวลาของ Haskell ไม่ได้เรียบร้อยเหมือนปัจจุบัน เราต้องขอบคุณการพัฒนาของไลบรารี Data.Time ตลอดหลายปีที่ผ่านมา มันให้เรา UTCTime, ซึ่งเป็นจุดเวลาที่ไม่มีความกำกวม
มีทางเลือกอื่นหรือไม่? แน่นอน คุณอาจพบว่า Data.Time.Calendar และ Data.Time.Clock มีประโยชน์สำหรับสถานการณ์เฉพาะ นอกจากนี้ยังมีไลบรารี time แบบเก่าสำหรับผู้ที่รู้สึกโหยหาหรือติดกับโค้ดที่เป็นมรดก
ตอนนี้, รายละเอียดที่สำคัญ: การเปรียบเทียบวันที่ใน Haskell ขึ้นอยู่กับ UTCTime ซึ่งคู่กันระหว่างวัน (Day) และเวลา (DiffTime หรือ NominalDiffTime) เป็นฟังก์ชัน compare ที่ทำหน้าที่หนัก, สมาชิกที่น่าสนใจของคลาส Ord, ช่วยให้เราใช้ >, <, == และอื่น ๆ อีกมากมาย แค่จำไว้ว่า Haskell รักความปลอดภัยของชนิด ให้แน่ใจว่าคุณเปรียบเทียบแอปเปิ้ลกับแอปเปิ้ลเสมอ, หรือในกรณีของเรา, UTCTime กับ UTCTime
ดูเพิ่มเติม
ขุดลึกขึ้นหรือหาความช่วยเหลือด้วยเหล่านี้: