]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Utils.hs
I'm getting tired so I must have a rest.
[Rakka.git] / Rakka / Utils.hs
index cb77474553c42fee4f6cdcaf340a32a8db4e38a9..4da609cd48b0baf42d015c3975f2644a2190f2da 100644 (file)
@@ -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