Haskellで秒を日時に変換

仕事で秒を日時に変換して確認したいことが多いので
簡単なコマンドをHaskellで自作してみた。


System.TimeモジュールのTOD関数を第1引数に経過秒を指定すると
ClockTime型のデータが生成されるらしい。

-- SecToDate.sh --
module Main where

import System.Time
import System.Environment (getArgs, getProgName)

main :: IO ()
main = do
    args <- getArgs
    prog <- getProgName

    if (length args) < 1
    then
        putStrLn $ "usage: " ++ prog ++ " seconds."
    else
        putStrLn $ show $ TOD (read (head args) :: Integer) 0


Windows上でビルド。

C:\work\haskell\SecToDate>ghc SecToDate.hs
[1 of 1] Compiling Main             ( SecToDate.hs, SecToDate.o )
Linking SecToDate.exe ...


実行。

C:\work\haskell\SecToDate>SecToDate.exe 1000000000
Sun Sep  9 10:46:40 東京 (標準時) 2001

C:\work\haskell\SecToDate>SecToDate.exe 0
Thu Jan  1 09:00:00 東京 (標準時) 1970

C:\work\haskell\SecToDate>SecToDate.exe
usage: SecToDate.exe seconds.


Haskellでプラグラム書くのは楽しい上に
Windows上では単体動作可能なexeが生成できるのが
個人的にすごくうれしかったりする。


今までツール類はJavaRubyで作ってるんだけど
ランタイム環境が必要だったりで
実行可能な状態で配布する方法にはすごく悩んだりするんだよね。。。