3

Haskell プログラムに次のようなコードがあります。

...
start <- getCurrentTime
...
end <- getCurrentTime
...
delta = end `diffUTCTime` start
...

この後、deltatype を持っていNominalDiffTimeます。ドキュメントに書かれているように、この型は から継承されてNumおり、小数点以下 3 桁 (たとえば) で印刷したいと考えています。ただし、次のようなものを使用してもprintf "%.3f" delta機能しません: No instance for (PrintfArg NominalDiffTime).

これを正しく行う方法は?

4

2 に答える 2

6

きれいにフォーマットされた差分時間が必要な場合は、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"

また、日は d として、時間は h として実行されます。ghci には型シグネチャが必須であることに注意してDoubleくださいNominalDiffTime

于 2012-09-07T13:38:26.387 に答える
5

型に変換してPrintfArg、目的の形式で印刷できます。

printf "%.3f" (realToFrac delta :: Double)

それをします。

于 2012-09-07T13:28:23.713 に答える