我有包含日期的字符串,格式为"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的函数,因为我找不到已经存在的函数.
使用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)
如果你确定你的字符串具有正确的日期格式,你可以从提取的结果Right与fromRight'对的extra包:
> import Data.Either.Extra
> fromRight' $ parseDateFormat "YYYYMMDD" "20180409"
9 April 2018, 0:0:0
Run Code Online (Sandbox Code Playgroud)