@@ -65,7 +65,7 @@ import Data.Binary.Get (Get, runGet, getWord8, getWord32be, getWord64be,
6565import qualified Data.ByteString as B
6666import qualified Data.ByteString.Lazy as L
6767import Data.Monoid (mappend)
68−import Data.Maybe (listToMaybe)
68+import Data.Maybe (listToMaybe, fromMaybe)
6969import Data.Word (Word8)
7070import Data.Int (Int32, Int64)
7171import Data.Typeable (Typeable)
@@ -82,10 +82,12 @@ instance Exception OlsonError
8282
8383-- | Convert parsed Olson timezone data into a @TimeZoneSeries@.
8484olsonToTimeZoneSeries :: OlsonData -> Maybe TimeZoneSeries
85−olsonToTimeZoneSeries (OlsonData ttimes ttinfos@(dflt:_) _ _) =
85+olsonToTimeZoneSeries (OlsonData ttimes ttinfos@(dflt0:_) _ _) =
8686 fmap (TimeZoneSeries $ mkTZ dflt) . mapM (lookupTZ ttinfos) $
8787 reverse ttimes
8888 where
89+ dflt = fromMaybe dflt0 . listToMaybe $ filter isStd ttinfos
90+ isStd (TtInfo _ isdst _ _) = not isdst
8991 mkTZ (TtInfo gmtoff isdst _ abbr) = TimeZone (gmtoff `div` 60) isdst abbr
9092 lookupTZ ttinfos ttime = fmap (((,) $ toUTC ttime) . mkTZ) . listToMaybe $
9193 drop (transIndex ttime) ttinfos