Do "--for-each" in the local time zone
authorJoachim Breitner <mail@joachim-breitner.de>
Wed, 17 Sep 2014 09:42:45 +0000 (09:42 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Wed, 17 Sep 2014 09:42:45 +0000 (09:42 +0000)
src/Stats.hs
src/stats-main.hs

index c38fb46..0cf432e 100644 (file)
@@ -174,15 +174,15 @@ calcSums = LeftFold M.empty
                 let go' m act = M.insertWith' (+) act (fromInteger (tlRate tl)/1000) m
                 in foldl' go' m (snd (tlData tl))) id
 
-processRepeater :: Repeater -> LeftFold (Bool :!: TimeLogEntry (Ctx, ActivityData)) ReportResults -> LeftFold (Bool :!: TimeLogEntry (Ctx, ActivityData)) ReportResults
-processRepeater r rep = case repeaterImpl r of
+processRepeater :: TimeZone -> Repeater -> LeftFold (Bool :!: TimeLogEntry (Ctx, ActivityData)) ReportResults -> LeftFold (Bool :!: TimeLogEntry (Ctx, ActivityData)) ReportResults
+processRepeater tz r rep = case repeaterImpl r of
     RepeaterImpl catR showR ->
         filterElems (\(b :!: _) -> b) $
         pure (RepeatedReportResults "Day" . map (first showR) . M.toList) <*>
-        multiplex (catR . tlTime . Strict.snd) rep
+        multiplex (catR . utcToLocalTime tz . tlTime . Strict.snd) rep
 
 data RepeaterImpl where
-  RepeaterImpl :: Ord r => (UTCTime -> r) -> (r -> String) -> RepeaterImpl
+  RepeaterImpl :: Ord r => (LocalTime -> r) -> (r -> String) -> RepeaterImpl
 
 repeaterImpl :: Repeater -> RepeaterImpl
 repeaterImpl ByMinute = RepeaterImpl
@@ -193,13 +193,13 @@ repeaterImpl ByHour = RepeaterImpl
     (formatTime defaultTimeLocale "%F %H")
     id
 repeaterImpl ByDay = RepeaterImpl
-    utctDay
+    localDay
     showGregorian
 repeaterImpl ByMonth = RepeaterImpl
-    ((\(y,m,_) -> (y, m)) . toGregorian . utctDay)
+    ((\(y,m,_) -> (y, m)) . toGregorian . localDay)
     (\(y,m) -> show y ++ "-" ++ show m)
 repeaterImpl ByYear = RepeaterImpl
-    ((\(y,_,_) -> y) . toGregorian . utctDay)
+    ((\(y,_,_) -> y) . toGregorian . localDay)
     show
 
 processReport :: ReportOptions -> Report -> LeftFold (Bool :!: TimeLogEntry (Ctx, ActivityData)) ReportResults
index 9b8ff31..d5251dc 100644 (file)
@@ -18,6 +18,7 @@ import System.Posix.Files
 import System.ProgressBar
 import TermSize
 import qualified Data.MyText as T
+import Data.Time.LocalTime
 
 import TimeLog
 import Categorize
@@ -165,6 +166,7 @@ main = do
           (_,_,errs) -> do
                 hPutStr stderr (concat errs ++ usageInfo header options)
                 exitFailure
+  tz <- getCurrentTimeZone
 
   dir <- getAppUserDataDirectory "arbtt"
   flags <- foldl (>>=) (return (defaultOptions dir)) actions
@@ -207,7 +209,7 @@ main = do
                 [] -> TotalTime
                 [x] -> x
                 _ -> error "Please specify exactly one report to generate"
-  let repeater = foldr (.) id $ map processRepeater (optRepeater flags)
+  let repeater = foldr (.) id $ map (processRepeater tz) (optRepeater flags)
 
   -- These are defined here, but of course only evaluated when any report
   -- refers to them. Some are needed by more than one report, which is then