从[Char]中提取YYYYMMDD并创建DateTime值

san*_*ood 1 haskell

我有包含日期​​的字符串,格式为"YYYYMMDD".这是理所当然的,没有错误的可能性.

我想从他们创建DateTime.

我设法有一些工作,但这些小事情似乎很复杂:

-- Only works in base 10 , for positive values
stringToInt :: String -> Int
stringToInt [] = 0
stringToInt (x:xs) = (digitToInt x * 10^length xs ) + (stringToInt xs) 

-- Expecting format = "YYYYMMDD"
stringToDateTime :: String -> DateTime
stringToDateTime s = DateTime year month day 0 0 0
  where year = stringToInt $ take 4 s 
        month = stringToInt $ take(6-4) . drop 4 $ s
        day = stringToInt $ take(8-6) . drop 6 $ s

date1 = stringToDateTime "20180409"
Run Code Online (Sandbox Code Playgroud)

我尝试了parseDate函数,但无法让它工作,因为我无法找到它所期望的String格式(这里是Data.Dates doc:我们怎么知道预期的格式?)

这就是为什么我最终自己从我的String创建一个DateTime的功能,这样做我必须创建一个从[Char]转换Int的函数,因为我找不到已经存在的函数.

Sté*_*ent 5

使用dates包,我认为你需要parseDateFormat:

> import Data.Dates
> import Data.Dates.Formats (parseDateFormat)
> parseDateFormat "YYYYMMDD" "20180409"
Right 9 April 2018, 0:0:0
Run Code Online (Sandbox Code Playgroud)

如果你确定你的字符串具有正确的日期格式,你可以从提取的结果RightfromRight'对的extra包:

> import Data.Either.Extra
> fromRight' $ parseDateFormat "YYYYMMDD" "20180409"
9 April 2018, 0:0:0
Run Code Online (Sandbox Code Playgroud)