X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FUtils.hs;fp=Rakka%2FUtils.hs;h=4da609cd48b0baf42d015c3975f2644a2190f2da;hb=03585f9c5773f6c0b59497f4f563909576c402b5;hp=cb77474553c42fee4f6cdcaf340a32a8db4e38a9;hpb=484e15845d9c06d0fa62044d3b6b3ff8c78a6e04;p=Rakka.git diff --git a/Rakka/Utils.hs b/Rakka/Utils.hs index cb77474..4da609c 100644 --- a/Rakka/Utils.hs +++ b/Rakka/Utils.hs @@ -3,11 +3,14 @@ module Rakka.Utils , maybeA , defaultTo , deleteIfEmpty + , formatW3CDateTime ) where import Control.Arrow import Control.Arrow.ArrowList +import System.Time +import Text.Printf parseYesOrNo :: ArrowChoice a => a String Bool @@ -37,4 +40,37 @@ deleteIfEmpty :: (ArrowList a, ArrowChoice a) => a String String deleteIfEmpty = proc str -> do case str of "" -> none -< () - _ -> returnA -< str \ No newline at end of file + _ -> returnA -< str + + +formatW3CDateTime :: CalendarTime -> String +formatW3CDateTime time + = formatDateTime time ++ formatTimeZone time + where + formatDateTime :: CalendarTime -> String + formatDateTime time + = printf "%04d-%02d-%02dT%02d:%02d:%02d" + (ctYear time) + (fromEnum (ctMonth time) + 1) + (ctDay time) + (ctHour time) + (ctMin time) + (ctSec time) + + formatTimeZone :: CalendarTime -> String + formatTimeZone time + = case ctTZ time + of offset | offset < 0 -> '-':(showTZ $ negate offset) + | offset == 0 -> "Z" + | otherwise -> '+':(showTZ offset) + + showTZ :: Int -> String + showTZ offset + = let hour = offset `div` 3600 + min = (offset - hour * 3600) `div` 60 + in + show2 hour ++ ":" ++ show2 min + + show2 :: Int -> String + show2 n | n < 10 = '0':(show n) + | otherwise = show n \ No newline at end of file