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 +65/−0
- LICENSE +20/−0
- Setup.hs +2/−0
- rfc3339.cabal +50/−0
+ 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