我有一个格式化时间字符串来自日期文件格式为" 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"
请建议一种解析毫秒的方法,以便上面的测试包含它们。
答案 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省略小数点,除非指定了填充。