Haskell:
So sánh hai ngày
Làm thế nào:
Haskell, được biết đến một cách âm thầm với sự tinh khiết của mình, cần bạn nói chuyện về ngày tháng với những thư viện đúng đắn. Hãy dùng Data.Time
.
import Data.Time
-- Định nghĩa hai ngày
date1 :: UTCTime
date1 = UTCTime (fromGregorian 2023 4 1) (secondsToDiffTime 0)
date2 :: UTCTime
date2 = UTCTime (fromGregorian 2024 4 2) (secondsToDiffTime 3600)
-- So sánh các ngày
compareDates :: UTCTime -> UTCTime -> Ordering
compareDates = compare
main :: IO ()
main = do
print $ date1 `compareDates` date2 -- Kết quả sẽ là LT
print $ date2 `compareDates` date1 -- Kết quả sẽ là GT
print $ date1 `compareDates` date1 -- Kết quả sẽ là EQ
Rất đơn giản, phải không? LT
cho ít hơn, GT
cho nhiều hơn, và EQ
cho bằng nhau.
Sâu hơn
Ngày xưa, việc xử lý thời gian của Haskell không mượt mà như bây giờ. Chúng ta phải cảm ơn sự tiến triển của thư viện Data.Time
qua các năm. Nó cho chúng ta UTCTime
, một điểm thời gian rõ ràng không gây hiểu nhầm.
Có lựa chọn khác không? Chắc chắn rồi. Bạn có thể thấy Data.Time.Calendar
và Data.Time.Clock
hữu ích cho các tình huống cụ thể. Cũng có thư viện time
cũ cho những ai cảm thấy hoài niệm hoặc phải đối mặt với mã nguồn lỗi thời.
Bây giờ, vào chi tiết: Việc so sánh các ngày trong Haskell dựa trên UTCTime
, kết hợp một ngày (Day
) và một thời gian (DiffTime
hoặc NominalDiffTime
). Chính hàm compare
làm nặng nhọc, một thành viên gọn gàng của lớp Ord
, cho phép chúng ta sử dụng >, <, ==
và nhiều hơn nữa. Chỉ cần nhớ Haskell yêu thích sự an toàn kiểu dữ liệu của mình. Hãy chắc chắn bạn luôn so sánh đồng nhất, hoặc trong trường hợp của chúng ta, UTCTime
với UTCTime
.
Xem thêm
Hãy đi sâu hơn hoặc tìm sự giúp đỡ với những nguồn này: