-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A pure Haskell parser and renderer for binary Olson timezone files -- -- A parser and renderer for binary Olson timezone files whose format is -- specified by the tzfile(5) man page on Unix-like systems. For more -- information about this format, see -- http://www.iana.org/time-zones/repository/tz-link.html. -- Functions are provided for converting the parsed data into -- TimeZoneSeries objects from the timezone-series package. On -- many platforms, binary Olson timezone files suitable for use with this -- package are available in the directory usrshare/zoneinfo and -- its subdirectories on your computer. For a way to read binary Olson -- timezone files at compile time, see the timezone-olson-th package -- (http://hackage.haskell.org/package/timezone-olson-th). @package timezone-olson @version 0.2.0 -- | A parser and renderer for binary Olson timezone files whose format is -- specified by RFC 8536. Functions are provided for converting the -- parsed data into TimeZoneSeries and TimeZone -- objects. module Data.Time.LocalTime.TimeZone.Olson -- | Read timezone data from a binary Olson timezone file and convert it -- into a TimeZoneSeries for use together with the types and -- fucntions of Data.Time. This is the function from this module -- for which you are most likely to have use. -- -- If the values in the Olson timezone file exceed the standard size -- limits (see defaultLimits), this function throws an exception. -- For other behavior, use getOlson and runGet directly. getTimeZoneSeriesFromOlsonFile :: FilePath -> IO TimeZoneSeries -- | Parse a binary Olson timezone file. -- -- If the values in the Olson timezone file exceed the standard size -- limits (see defaultLimits), this function throws an exception. -- For other behavior, use getOlson and runGet directly. getOlsonFromFile :: FilePath -> IO OlsonData -- | Convert parsed Olson timezone data into a TimeZoneSeries. olsonToTimeZoneSeries :: OlsonData -> Maybe TimeZoneSeries -- | A binary parser for binary Olson timezone files getOlson :: SizeLimits -> Get OlsonData -- | An exception indicating that the binary data being parsed was not -- valid Olson timezone data data OlsonError -- | Render a TimeZoneSeries as a binary Olson timezone file. -- -- If the values in the Olson timezone data exceed the standard size -- limits (see defaultLimits), this function throws an exception. -- For other behavior, use timeZoneSeriesToOlson, -- verifyOlsonLimits, putOlson and runPut directly. renderTimeZoneSeriesToOlsonFile :: FilePath -> TimeZoneSeries -> IO () -- | Convert a TimeZoneSeries to OlsonData for rendering. timeZoneSeriesToOlson :: TimeZoneSeries -> Maybe OlsonData -- | Render Olson timezone data as a binary Olson timezone file -- -- If the values in the Olson timezone data exceed the standard size -- limits (see defaultLimits), this function throws an exception. -- For other behavior, use verifyOlsonLimits, putOlson and -- runPut directly. renderOlsonToFile :: FilePath -> OlsonData -> IO () -- | Check whether OlsonData is within size limits. verifyOlsonLimits :: SizeLimits -> OlsonData -> Bool -- | Render Olson timezone data in binary Olson timezone file format as a -- lazy ByteString putOlson :: OlsonData -> Put -- | Extract Olson timezone data that can be rendered using Version 1 -- format extractOlsonV1 :: OlsonData -> OlsonData -- | OlsonData represents a full set of timezone data for a -- location. -- -- OlsonData can represent timezone data from files in Version -- 1, 2, or 3 format. -- -- Version 1 format files can only contain timestamp values that can be -- represented in less than 32 bits, and cannot contain a POSIX TZ -- string. -- -- In a Version 2 format file, the timezone data is split into two parts. -- The first part contains timezone data for which all timestamp values -- can be represented in less than 32 bits, and the second part contains -- timezone data for which 32 bits or more are required to represent -- timestamp values. The POSIX TZ string, if present, can only be -- rendered in a Version 2 file, and appears after both parts of the -- timezone data. -- -- Version 3 format files relax certain syntax requirements for the POSIX -- TZ string. Since we represent the POSIX TZ string as an unparsed -- String, Version 3 is identical to Version 2 for our purposes. data OlsonData OlsonData :: [Transition] -> [TtInfo String] -> [LeapInfo] -> Maybe String -> OlsonData [olsonTransitions] :: OlsonData -> [Transition] [olsonTypes] :: OlsonData -> [TtInfo String] [olsonLeaps] :: OlsonData -> [LeapInfo] -- | Optional POSIX TZ string for times after the last Transition [olsonPosixTZ] :: OlsonData -> Maybe String -- | A Transition represents a moment when the clocks change in a -- timezone. It consists of a Unix timestamp value that indicates the -- exact moment in UTC when the clocks change, and the 0-based index in -- the list of TtInfo specifications for the description of the -- new time after the clocks change. data Transition Transition :: Integer -> Int -> Transition -- | Unix timestamp indicating the time when the clocks change [transTime] :: Transition -> Integer -- | 0-based index in the list of TtInfo that describes the new -- time [transIndex] :: Transition -> Int -- | A TransitionType is historical information about whether the -- official body that announced a time change specified the time of the -- change in terms of UTC, standard time (i.e., non-summer time) for the -- time zone, or the current wall clock time in the time zone. This -- historical trivia may seem rather boring, but unfortunately it is -- needed to interpret a POSIX-style TZ string timezone specification -- correctly. data TransitionType Std :: TransitionType Wall :: TransitionType UTC :: TransitionType -- | A TtInfo is a specification of local time in a timezone for -- some period during which the clocks did not change. abbr is -- String if the timezone abbreviation is represented as a -- String, or Int if it is represented as an index into -- a long string of null-terminated abbreviation strings (as in an Olson -- binary timezone file). data TtInfo abbr TtInfo :: Int -> Bool -> TransitionType -> abbr -> TtInfo abbr -- | The offset of local clocks from UTC, in seconds [tt_utoff] :: TtInfo abbr -> Int -- | True if local clocks are summer time [tt_isdst] :: TtInfo abbr -> Bool [tt_ttype] :: TtInfo abbr -> TransitionType -- | The timezone abbreviation string. [tt_abbr] :: TtInfo abbr -> abbr -- | Olson timezone files can contain leap second specifications, though -- most do not. data LeapInfo LeapInfo :: Integer -> Int -> LeapInfo -- | A Unix timestamp indicating the time that the leap second occurred [leapTime] :: LeapInfo -> Integer -- | The new total offset of UTC from UT1 after this leap second [leapOffset] :: LeapInfo -> Int -- | The reference C implentation imposes size limits on the data -- structures in a timezone file. data SizeLimits SizeLimits :: Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> SizeLimits -- | The maximum number of transition times [maxTimes] :: SizeLimits -> Maybe Int -- | The maximum number of TtInfo clock settings [maxTypes] :: SizeLimits -> Maybe Int -- | The maximum total number of bytes in all timezone abbreviations. [maxAbbrChars] :: SizeLimits -> Maybe Int -- | The maximum number of leap second specifications. [maxLeaps] :: SizeLimits -> Maybe Int -- | The size limits in defaultLimits are taken from the file -- tzfile.h from tzcode version 2010f. These are the limits for the C -- implementation on many platforms. defaultLimits :: SizeLimits -- | limitsNoSolar contains the tighter size limits imposed on -- some platforms that do not allow timezones that are based on solar -- time. limitsNoSolar :: SizeLimits -- | noLimits imposes no size limits. If you use noLimits -- when parsing, you may exhaust all available memory when reading a -- faulty or malicious timezone file. If you use noLimits when -- rendering, the rendered timezone file might not be readable on some -- systems. noLimits :: SizeLimits