文字列から日付をパースする

Haskell:
文字列から日付をパースする

どのようにして:

Haskellは、箱から出してすぐに日付を解析するための基本的なツールを提供していますが、timeライブラリをコア機能として使ったり、より柔軟な解析のためにdate-parsetime-parseのようなライブラリを活用することで、この作業を大幅に簡素化できます。

まず、timeライブラリが利用可能であることを確認してください。それはしばしばGHCに含まれていますが、依存関係として指定する必要がある場合は、プロジェクトのcabalファイルにtimeを追加するか、cabal install timeを使用して手動でインストールしてください。

import Data.Time.Format
import Data.Time.Clock
import System.Locale (defaultTimeLocale)

-- time ライブラリを使って標準フォーマットの日付を解析する
parseBasicDate :: String -> Maybe UTCTime
parseBasicDate = parseTimeM True defaultTimeLocale "%Y-%m-%d" 

使用例と出力:

main :: IO ()
main = print $ parseBasicDate "2023-04-01"

-- 出力: Just 2023-03-31 22:00:00 UTC

複数のフォーマットやロケールを扱う必要があるより複雑なシナリオの場合、date-parseのようなサードパーティライブラリを使う方が便利です:

date-parseを依存関係に追加してインストールしたと仮定すると、ここに使用例があります:

import Data.Time.Calendar
import Text.Date.Parse (parseDate)

-- date-parse ライブラリを使って日付文字列を解析すると、複数のフォーマットをサポートする
parseFlexibleDate :: String -> Maybe Day
parseFlexibleDate = parseDate

date-parseを使った使用例:

main :: IO ()
main = print $ parseFlexibleDate "April 1, 2023"

-- 出力: Just 2023-04-01

それぞれの例は、文字列を取り、それをHaskellで使える日付オブジェクトに変換する基本的なアプローチを示しています。timeライブラリの組み込み機能を使うか、date-parseのようなサードパーティの解決策を選ぶかは、扱う必要のある入力フォーマットの範囲など、アプリケーションの特定のニーズに依存します。