packages feed

rfc3339 (empty) → 1.0.0

raw patch · 4 files changed

+137/−0 lines, 4 filesdep +basedep +old-localedep +timesetup-changed

Dependencies added: base, old-locale, time

Files

+ Data/Time/RFC3339.hs view
@@ -0,0 +1,65 @@+{-# LANGUAGE TypeSynonymInstances #-}+-- |                                                                               +-- Module      : Data.Time.RFC3339+-- Copyright   : (c) 2011 Hugo Daniel Gomes+--+-- License     : BSD-style+-- Maintainer  : mr.hugo.gomes@gmail.com+-- Stability   : experimental+-- Portability : GHC+--+-- Support for reading and displaying time in the format specified by +-- the RFC3339 <http://www.ietf.org/rfc/rfc3339.txt>++module Data.Time.RFC3339 (+    -- * Basic type class+    RFC3339(showRFC3339, readRFC3339)+) where++import Data.Time.Format+import Data.Time.LocalTime+import Data.Time.Calendar+import Data.Maybe +import System.Locale++test1 = "1985-04-12T23:20:50.52Z"+test2 = "1996-12-19T16:39:57-08:00"+test3 = "1990-12-31T23:59:60Z"+test4 = "1990-12-31T15:59:60-08:00"+test5 = "1937-01-01T12:00:27.87+00:20"+tests = [test1, test2, test3, test4, test5]+testParse = length (catMaybes (map readRFC3339 tests)) == length tests++-- ----------------------------------------------------------------------------+-- The RFC3339 class definition++-- | This class is here to allow future support for other data types +-- like Data.Text or Data.ByteString if that becomes necessary+class RFC3339 a where+  showRFC3339 :: ZonedTime -> a+  readRFC3339 :: a -> Maybe ZonedTime++-- | For now there is only an instance for the String data type+instance RFC3339 String where+  showRFC3339 zt@(ZonedTime lt z) = +    formatTime defaultTimeLocale "%FT%T" zt ++ printZone+    where+      timeZoneStr = timeZoneOffsetString z+      printZone = if timeZoneStr == timeZoneOffsetString utc+                    then "Z"+                    else take 3 timeZoneStr ++ ":" ++ drop 3 timeZoneStr+  readRFC3339 t = foldr (tryP t) Nothing [ p "%FT%TZ"+                                         , p "%FT%T%z"+                                         , p "%FT%T%Q%z"+                                         , p "%FT%T%QZ"+                                         ]+    where +      p :: String -> String -> Maybe ZonedTime+      p f s = parseTime defaultTimeLocale f s++      tryP :: String -> (String -> Maybe a) -> Maybe a -> Maybe a+      tryP s f acc | isJust acc = acc+                   | otherwise = f s++showTime :: IO String+showTime = getZonedTime >>= return . showRFC3339
+ LICENSE view
@@ -0,0 +1,20 @@+Copyright (c) 2010 Hugo Daniel H. O. Gomes <hugo.gomes@fcsh.unl.pt>++This software is provided 'as-is', without any express or implied+warranty. In no event will the authors be held liable for any damages+arising from the use of this software.++Permission is granted to anyone to use this software for any purpose,+including commercial applications, and to alter it and redistribute it+freely, subject to the following restrictions:++1. The origin of this software must not be misrepresented; you must not+   claim that you wrote the original software. If you use this software+   in a product, an acknowledgment in the product documentation would+   be appreciated but is not required.++2. Altered source versions must be plainly marked as such, and must not+   be misrepresented as being the original software.++3. This notice may not be removed or altered from any source+   distribution.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ rfc3339.cabal view
@@ -0,0 +1,50 @@+Name:          rfc3339+Version:       1.0.0+Category:      Web, Time+Synopsis:      Parse and display time according to RFC 3339+Description:   +  .+  Parse and display time according to +  RFC 3339 <http://www.ietf.org/rfc/rfc3339.txt>.+  This package defines a type class to parse and read RFC 3339 from different+  data types. +  .+  Right now there is only support for reading and showing String.+  .+  Example of usage:+  > +  > import Data.Time.LocalTime+  > +  > showTime :: IO String+  > showTime = getZonedTime >>= return . showRFC3339+  >+  > example1 = "1985-04-12T23:20:50.52Z"+  > example2 = "1996-12-19T16:39:57-08:00"+  > example3 = "1990-12-31T23:59:60Z"+  > example4 = "1990-12-31T15:59:60-08:00"+  > example5 = "1937-01-01T12:00:27.87+00:20"+  > examples = [example1,example2,exmaple3,example4,example5]+  >+  > readAll = map readRFC3339 examples+  .+  For more information please read the documentation of the module +  bellow.+Build-type:    Simple+Maintainer:    Hugo Daniel Gomes <mr.hugo.gomes@gmail.com>+Author:        Hugo Daniel Gomes <mr.hugo.gomes@gmail.com>+Copyright:     Hugo Daniel Gomes+Cabal-version: >= 1.6+License:       BSD3+License-file:  LICENSE+source-repository head                                                             +  type:     git                                                                    +  location: git://github.com/HugoDaniel/RFC3339.git++library+  build-depends:+    base < 5, time >= 1.2, old-locale++  exposed-modules:+    Data.Time.RFC3339++  extensions: TypeSynonymInstances