在Haskell中打印NominalDiffTime
我的Haskell程序中有这样一段代码:在Haskell中打印NominalDiffTime,haskell,type-conversion,Haskell,Type Conversion,我的Haskell程序中有这样一段代码: ... start <- getCurrentTime ... end <- getCurrentTime ... delta = end `diffUTCTime` start ... 。。。 开始您可以将其转换为PrintfArg类型,以所需格式打印,例如 printf "%.3f" (realToFrac delta :: Double) 确实如此。如果您想要格式良好的diff time,可以将System.time.Utils(r
...
start <- getCurrentTime
...
end <- getCurrentTime
...
delta = end `diffUTCTime` start
...
。。。
开始您可以将其转换为PrintfArg
类型,以所需格式打印,例如
printf "%.3f" (realToFrac delta :: Double)
确实如此。如果您想要格式良好的diff time,可以将System.time.Utils(renderSecs)
与round
ghci> import Data.Time.Clock
ghci> import System.Time.Utils (renderSecs)
ghci>
ghci> let renderS = renderSecs . round :: NominalDiffTime -> String
ghci> t1 <- getCurrentTime
ghci> -- wait a little :-P
ghci> t2 <- getCurrentTime
ghci> renderS $ t2 `diffUTCTime` t1
"2m15s"
ghci>导入数据.Time.Clock
ghci>导入System.Time.Utils(renderSecs)
ghci>
ghci>let renderS=renderSecs。round::NominalDiffTime->String
ghci>t1——稍等:-P
ghci>t2渲染$t2`diffUTCTime`t1
“2m15s”
它也会将天作为d,小时作为h。请注意,类型签名对于ghci是必需的,因为否则它将默认为Double
,并且突然无法为其提供NominalDiffTime
值。如果使用参数定义类型签名,则不需要类型签名,let renderS d=renderSecs(第d轮)
,或者,如果您关闭MR:set-XNoMonomorphismRestriction
,它是否只适合打印整秒数,或者也可以修改为小数部分?我试着从同一个系统.Time.Utils
中使用renderd
,但是运气不好。@DanielFischer,是的,这也是可能的。谢谢你指出它。@chersaya:不,请看签名:renderSecs::Integer->String
。我认为您必须编写自己的漂亮打印函数才能做到这一点。您也可以只使用renderSecs
,然后从DiffTime
中减去整数,得到小数部分,然后将其附加到渲染函数。丑陋,我知道,但除了重新实现renderd
之外,我看不到任何方法。请注意,delta
不一定是两个时间之间经过的时间-NominalDiffTime
忽略闰秒,例如。这是真的,但我认为几乎所有程序都可以安全地忽略它。好吧,你这么说,但令人沮丧的是,上次有一次令人尴尬的闰秒,有多少东西坏了。。。我的sysadmin服务器必须重新启动两次,iirc。例如,如果你非常不走运,我认为delta
可能是负数。。。(或是肯定的,或是不应该的)