| Copyright | Yitzchak Gale 2019 |
|---|---|
| Maintainer | Yitzchak Gale <gale@sefer.org> |
| Portability | portable |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Data.Time.LocalTime.TimeZone.Olson
Description
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.
Synopsis
- getOlson :: SizeLimits -> Get OlsonData
- getOlsonFromFile :: FilePath -> IO OlsonData
- getTimeZoneSeriesFromOlsonFile :: FilePath -> IO TimeZoneSeries
- olsonToTimeZoneSeries :: OlsonData -> Maybe TimeZoneSeries
- data OlsonError
- extractOlsonV1 :: OlsonData -> OlsonData
- putOlson :: OlsonData -> Put
- renderOlsonToFile :: FilePath -> OlsonData -> IO ()
- renderTimeZoneSeriesToOlsonFile :: FilePath -> TimeZoneSeries -> IO ()
- timeZoneSeriesToOlson :: TimeZoneSeries -> Maybe OlsonData
- verifyOlsonLimits :: SizeLimits -> OlsonData -> Bool
- defaultLimits :: SizeLimits
- limitsNoSolar :: SizeLimits
- noLimits :: SizeLimits
- data LeapInfo = LeapInfo {
- leapTime :: Integer
- leapOffset :: Int
- data OlsonData = OlsonData {
- olsonTransitions :: [Transition]
- olsonTypes :: [TtInfo String]
- olsonLeaps :: [LeapInfo]
- olsonPosixTZ :: Maybe String
- data SizeLimits = SizeLimits {
- maxTimes :: Maybe Int
- maxTypes :: Maybe Int
- maxAbbrChars :: Maybe Int
- maxLeaps :: Maybe Int
- data Transition = Transition {
- transTime :: Integer
- transIndex :: Int
- data TransitionType
- data TtInfo abbr = TtInfo {
- tt_utoff :: Int
- tt_isdst :: Bool
- tt_ttype :: TransitionType
- tt_abbr :: abbr
Documentation
getOlson :: SizeLimits -> Get OlsonData Source #
A binary parser for binary Olson timezone files
getOlsonFromFile :: FilePath -> IO OlsonData Source #
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.
getTimeZoneSeriesFromOlsonFile :: FilePath -> IO TimeZoneSeries Source #
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.
olsonToTimeZoneSeries :: OlsonData -> Maybe TimeZoneSeries Source #
Convert parsed Olson timezone data into a TimeZoneSeries.
data OlsonError Source #
An exception indicating that the binary data being parsed was not valid Olson timezone data
Instances
| Exception OlsonError Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Parse Methods toException :: OlsonError -> SomeException fromException :: SomeException -> Maybe OlsonError displayException :: OlsonError -> String backtraceDesired :: OlsonError -> Bool | |
| Show OlsonError Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Parse Methods showsPrec :: Int -> OlsonError -> ShowS show :: OlsonError -> String showList :: [OlsonError] -> ShowS | |
extractOlsonV1 :: OlsonData -> OlsonData Source #
Extract Olson timezone data that can be rendered using Version 1 format
putOlson :: OlsonData -> Put Source #
Render Olson timezone data in binary Olson timezone file format
as a lazy ByteString
renderOlsonToFile :: FilePath -> OlsonData -> IO () Source #
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.
renderTimeZoneSeriesToOlsonFile :: FilePath -> TimeZoneSeries -> IO () Source #
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.
timeZoneSeriesToOlson :: TimeZoneSeries -> Maybe OlsonData Source #
Convert a TimeZoneSeries to OlsonData for rendering.
verifyOlsonLimits :: SizeLimits -> OlsonData -> Bool Source #
Check whether OlsonData is within size limits.
defaultLimits :: SizeLimits Source #
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.
limitsNoSolar :: SizeLimits Source #
limitsNoSolar contains the tighter size limits imposed on some
platforms that do not allow timezones that are based on solar time.
noLimits :: SizeLimits Source #
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.
Olson timezone files can contain leap second specifications, though most do not.
Constructors
| LeapInfo | |
Fields
| |
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.
Constructors
| OlsonData | |
Fields
| |
data SizeLimits Source #
The reference C implentation imposes size limits on the data structures in a timezone file.
Constructors
| SizeLimits | |
Fields
| |
data Transition Source #
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.
Constructors
| Transition | |
Fields
| |
Instances
| Show Transition Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Types Methods showsPrec :: Int -> Transition -> ShowS show :: Transition -> String showList :: [Transition] -> ShowS | |
| Eq Transition Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Types | |
data TransitionType Source #
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.
Instances
| Show TransitionType Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Types Methods showsPrec :: Int -> TransitionType -> ShowS show :: TransitionType -> String showList :: [TransitionType] -> ShowS | |
| Eq TransitionType Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Types Methods (==) :: TransitionType -> TransitionType -> Bool (/=) :: TransitionType -> TransitionType -> Bool | |
| Ord TransitionType Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Types Methods compare :: TransitionType -> TransitionType -> Ordering (<) :: TransitionType -> TransitionType -> Bool (<=) :: TransitionType -> TransitionType -> Bool (>) :: TransitionType -> TransitionType -> Bool (>=) :: TransitionType -> TransitionType -> Bool max :: TransitionType -> TransitionType -> TransitionType min :: TransitionType -> TransitionType -> 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).
Constructors
| TtInfo | |
Fields
| |
Instances
| Show abbr => Show (TtInfo abbr) Source # | |
| Eq abbr => Eq (TtInfo abbr) Source # | |
| Ord abbr => Ord (TtInfo abbr) Source # | |
Defined in Data.Time.LocalTime.TimeZone.Olson.Types | |