nptools-0.1: events-to-timelog.hs
import System.Locale
import Data.Time
import Data.Time.LocalTime
import Data.Time.Format
import Control.Monad
import Control.Monad.Instances ()
import Data.List
readMyTime :: String -> UTCTime
readMyTime = readTime defaultTimeLocale "%F %T%Q %Z"
timelogFormat :: TimeZone -> UTCTime -> String
timelogFormat tz = formatTime defaultTimeLocale "%Y/%m/%d %T" . utcToLocalTime tz
splitEvent :: String -> (UTCTime, [String])
splitEvent event =
case words event of
date : time : tz : "tags:" : tags -> (readMyTime (unwords [date, time, init tz]), tags)
_ -> error ("splitEvent: " ++ event)
work :: TimeZone -> [String] -> [String]
work tz = concat . (zipWith f `ap` (tail . map fst)) . map splitEvent
where f (a, b) c = [ unwords ["i", timelogFormat tz a, intercalate "," b]
, unwords ["o", timelogFormat tz c]
]
main :: IO ()
main = do tz <- getCurrentTimeZone
interact $ unlines . work tz . lines