如何在Haskell中使用Data.Time解析毫秒

时间:2014-10-21 05:31:42

标签: haskell

我有一个格式化时间字符串来自日期文件格式为" 08:14:59,012"并且我想将它们解析为UTCTime(以便能够进行一些时差和比较操作)。

我无法找到解析毫秒的方法。这是我到目前为止所拥有的

import System.Locale (defaultTimeLocale)
import Data.Time (UTCTime)
import Data.Time.Format (readTime)

readHMS :: String -> UTCTime
readHMS = readTime defaultTimeLocale "%H:%M:%S"
-- ^^ How to parse milis? ""%H:%M:%S,%Q" doesn't work

test = readHMS "08:14:59,012"

请建议一种解析毫秒的方法,以便上面的测试包含它们。

2 个答案:

答案 0 :(得分:3)

即使没有毫秒格式,如果正确缩放毫秒,也可以使用皮秒%q格式。幸运的是,这可以通过附加固定数量的零来完成,这样生成的字符串在逗号后面只有12个字符:

readHMS = readTime defaultTimeLocale "%H:%M:%S,%q"
                   --                         ^^^
                   --              vvvvvvvvvvvvvvvvvv
test    = readHMS $ "08:14:59,012" ++ replicate 9 '0'

答案 1 :(得分:0)

我觉得加上0才有皮秒风格没有多大意义。 为了记录,我会这样做:

readHMS = readTime defaultTimeLocale "%H:%M:%S%q"
test    = readHMS "08:14:59,012" 
-- returns 1970-01-01 08:14:59.012 UTC

因为如上所述in the doc

  
    

%Q     小数点和秒的分数,最多12秒小数,没有尾随零。对于整数秒,%Q省略小数点,除非指定了填充。