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

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

ดูเพิ่มเติม

ขุดลึกขึ้นหรือหาความช่วยเหลือด้วยเหล่านี้: