Phân tích ngày từ chuỗi kí tự

Haskell:
Phân tích ngày từ chuỗi kí tự

Cách thực hiện:

Haskell cung cấp nhiều cách để phân tích cú pháp ngày tháng, nhưng chúng ta hãy tập trung vào thư viện time và một ví dụ đơn giản sử dụng parseTimeM. Đảm bảo bạn đã cài đặt gói time.

import Data.Time.Format (parseTimeM, defaultTimeLocale)

main :: IO ()
main = do
  let dateString = "2023-03-21"
  let parsedDate = parseTimeM True defaultTimeLocale "%Y-%m-%d" dateString :: IO (Maybe Day)
  
  kết quả <- parsedDate
  tùy trường hợp kết quả của
    Just day -> putStrLn $ "Ngày đã phân tích: " ++ show day
    Nothing -> putStrLn "Không phân tích được ngày."

-- Kết quả sẽ là: Ngày đã phân tích: 2023-03-21

Sâu hơn

Trong lịch sử, việc phân tích cú pháp ngày tháng đã được xử lý khác nhau qua các ngôn ngữ và thư viện, với nhiều người sử dụng các biến thể của mẫu strftime từ C. Thư viện time của Haskell phản ánh cách tiếp cận này để giữ sự nhất quán. Các phương án thay thế cho time bao gồm việc sử dụng gói old-time, hiện đã bị khai tử, hoặc các thư viện của bên thứ ba như thyme hoặc chronos.

Về mặt thực hiện, phân tích cú pháp trong Haskell là an toàn theo kiểu, do đó sử dụng Maybe trong ví dụ để xử lý các trường hợp phân tích cú pháp thất bại. Hàm parseTimeM sử dụng suy luận kiểu để xác định kiểu trả về, làm cho nó linh hoạt. Việc hiểu các chỉ định định dạng, như %Y-%m-%d cho năm-tháng-ngày, là rất quan trọng.

Hệ thống kiểu mạnh của Haskell đảm bảo rằng một khi ngày đã được phân tích cú pháp, thì rõ ràng và không thể nhầm lẫn kiểu của nó, giảm thiểu các lỗi thời gian chạy liên quan đến thao tác ngày tháng. Tuy nhiên, sự nghiêm ngặt này đồng nghĩa với việc bạn phải xử lý các trường hợp khi đầu vào không khớp với mẫu mong đợi, do đó là việc sử dụng kết hợp mẫu cho JustNothing.

Xem Thêm