hodatime-0.1.1.1: src/Data/HodaTime/TimeZone/Internal.hs
module Data.HodaTime.TimeZone.Internal
(
TZIdentifier
,TransitionInfo(..)
,Transitions
,mkTransitions
,addTransitionInfo
,activeTransitionInfoFor
,nextTransitionInfo
,TimeZone(..)
)
where
import Data.Maybe (fromMaybe)
import Data.HodaTime.Instant.Internal (Instant)
import Data.Map.Strict (Map)
import qualified Data.Map.Strict as Map
newtype TZIdentifier = Zone String
deriving (Eq, Show)
data TransitionInfo = TransitionInfo {
ttGmtOffset :: Int
,ttIsDst :: Bool
,ttAbbreviation :: String
,ttIsStd :: Bool
,ttIsGmt :: Bool } deriving (Eq, Show)
type Transitions = Map Instant TransitionInfo
mkTransitions :: Transitions
mkTransitions = Map.empty
addTransitionInfo :: Instant -> TransitionInfo -> Transitions -> Transitions
addTransitionInfo = Map.insert
activeTransitionInfoFor :: Instant -> Transitions -> (Instant, TransitionInfo)
activeTransitionInfoFor t ts = fromMaybe (Map.findMin ts) $ Map.lookupLE t ts
nextTransitionInfo :: Instant -> Transitions -> (Instant, TransitionInfo)
nextTransitionInfo t ts = fromMaybe (Map.findMax ts) $ Map.lookupGT t ts
data TimeZone =
UTCzone
| TimeZone {
tzZone :: TZIdentifier
,tzTransitions :: Transitions }
deriving (Eq, Show)