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
ดูเพิ่มเติม
ขุดลึกขึ้นหรือหาความช่วยเหลือด้วยเหล่านี้: