1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
-----------------------------------------------------------------------------
-- |
-- Module : System.Locale
-- Copyright : (c) The University of Glasgow 2001
-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : libraries@haskell.org
-- Stability : provisional
-- Portability : portable
--
-- This module provides the ability to adapt to local conventions.
-- At present, it supports only time and date information as used by
-- 'System.Time.calendarTimeToString' from the "System.Time" module.
--
-----------------------------------------------------------------------------
module System.Locale (
TimeLocale(..)
, defaultTimeLocale
, iso8601DateFormat
, rfc822DateFormat
)
where
import Prelude
data TimeLocale = TimeLocale {
-- |full and abbreviated week days
wDays :: [(String, String)],
-- |full and abbreviated months
months :: [(String, String)],
intervals :: [(String, String)],
-- |AM\/PM symbols
amPm :: (String, String),
-- |formatting strings
dateTimeFmt, dateFmt,
timeFmt, time12Fmt :: String
} deriving (Eq, Ord, Show)
defaultTimeLocale :: TimeLocale
defaultTimeLocale = TimeLocale {
wDays = [("Sunday", "Sun"), ("Monday", "Mon"),
("Tuesday", "Tue"), ("Wednesday", "Wed"),
("Thursday", "Thu"), ("Friday", "Fri"),
("Saturday", "Sat")],
months = [("January", "Jan"), ("February", "Feb"),
("March", "Mar"), ("April", "Apr"),
("May", "May"), ("June", "Jun"),
("July", "Jul"), ("August", "Aug"),
("September", "Sep"), ("October", "Oct"),
("November", "Nov"), ("December", "Dec")],
intervals = [ ("year","years")
, ("month", "months")
, ("day","days")
, ("hour","hours")
, ("min","mins")
, ("sec","secs")
, ("usec","usecs")
],
amPm = ("AM", "PM"),
dateTimeFmt = "%a %b %e %H:%M:%S %Z %Y",
dateFmt = "%m/%d/%y",
timeFmt = "%H:%M:%S",
time12Fmt = "%I:%M:%S %p"
}
-- |Normally, ISO-8601 just defines YYYY-MM-DD
-- but we can add a time spec.
iso8601DateFormat :: Maybe String -> String
iso8601DateFormat timeFmt =
"%Y-%m-%d" ++ case timeFmt of
Nothing -> ""
Just fmt -> ' ' : fmt
rfc822DateFormat :: String
rfc822DateFormat = "%a, %_d %b %Y %H:%M:%S %Z"
|