首页 > 解决方案 > 更正格式字符串以在 Haskell 中解析日期时间

问题描述

我正在尝试解析一个datetime使用 Haskell 的Date.Time包,但我似乎没有正确的格式。

以下是我尝试解析的一些日期示例:

2015-01-01T01:00:00.000Z
2015-01-11T03:00:00.000Z
2015-01-11T03:00:00.000Z

我有一个类似的功能:

parseStringToDateTime :: String -> UTCTime
parseStringToDateTime = parseTimeOrError False defaultTimeLocale "%Y-%m-%d %HH:%MM:%SS"

但这不太正确,我得到一个运行时错误。

datetime解析这样的正确格式字符串是什么?

标签: datehaskellstring-formatting

解决方案


使用 time-1.9.3 我设法像这样格式化您的日期时间字符串:

λ> import Date.Time
λ> import Data.Time.Format.ISO8601 -- I think it's Date.Time.Format in newer versions
λ> formatParseM (iso8601Format @UTCTime) "2015-01-11T03:00:00.000Z" >>= print
2015-01-11 03:00:00 UTC

现在我们可以parseTimeOrError为您的用例复制:

λ> parseStringToDateTime s =  maybe (error $ "bad date-time string " ++ s) id $ formatParseM (iso8601Format @UTCTime) s
λ> parseStringToDateTime "2015-01-11T03:00:00.000Z" 
2015-01-11 03:00:00 UTC
λ> parseStringToDateTime "BAD"
*** Exception: bad date-time string BAD

推荐阅读