unix-time-0.4.7: Unix time parser/formatter and utilities

Safe HaskellNone
LanguageHaskell2010

Data.UnixTime

Contents

Synopsis

Data structure

data UnixTime Source #

Data structure for Unix time.

Please note that this uses GHC-derived Eq and Ord instances. Notably

>>> UnixTime 1 0 > UnixTime 0 999999999
True

You should instead use UnixDiffTime along with its helpers such as microSecondsToUnixDiffTime which will ensure that such unusual values are never created.

Constructors

UnixTime 

Fields

Instances
Eq UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Ord UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Show UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Storable UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Binary UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Methods

put :: UnixTime -> Put #

get :: Get UnixTime #

putList :: [UnixTime] -> Put #

Getting time

getUnixTime :: IO UnixTime Source #

Get current UnixTime from OS.

Parsing and formatting time

parseUnixTime :: Format -> ByteString -> UnixTime Source #

Parsing ByteString to UnixTime interpreting as localtime. This is a wrapper for strptime_l(). Many implementations of strptime_l() do not support %Z and some implementations of strptime_l() do not support %z, either. utMicroSeconds is always set to 0.

parseUnixTimeGMT :: Format -> ByteString -> UnixTime Source #

Parsing ByteString to UnixTime interpreting as GMT. This is a wrapper for strptime_l(). utMicroSeconds is always set to 0.

>>> parseUnixTimeGMT webDateFormat "Thu, 01 Jan 1970 00:00:00 GMT"
UnixTime {utSeconds = 0, utMicroSeconds = 0}

formatUnixTime :: Format -> UnixTime -> IO ByteString Source #

Formatting UnixTime to ByteString in local time. This is a wrapper for strftime_l(). utMicroSeconds is ignored. The result depends on the TZ environment variable.

formatUnixTimeGMT :: Format -> UnixTime -> ByteString Source #

Formatting UnixTime to ByteString in GMT. This is a wrapper for strftime_l(). utMicroSeconds is ignored.

>>> formatUnixTimeGMT webDateFormat $ UnixTime 0 0
"Thu, 01 Jan 1970 00:00:00 GMT"
>>> let ut = UnixTime 100 200
>>> let str = formatUnixTimeGMT "%s" ut
>>> let ut' = parseUnixTimeGMT "%s" str
>>> ((==) `on` utSeconds) ut ut'
True
>>> ((==) `on` utMicroSeconds) ut ut'
False

Format

type Format = ByteString Source #

Format of the strptime()/strftime() style.

webDateFormat :: Format Source #

Format for web (RFC 2616). The value is "%a, %d %b %Y %H:%M:%S GMT". This should be used with formatUnixTimeGMT and parseUnixTimeGMT.

mailDateFormat :: Format Source #

Format for e-mail (RFC 5322). The value is "%a, %d %b %Y %H:%M:%S %z". This should be used with formatUnixTime and parseUnixTime.

Difference time

data UnixDiffTime Source #

Data structure for UnixTime diff.

It is up to the user to ensure that udtMicroSeconds < 1000000. Helpers such as microSecondsToUnixDiffTime can help you to create valid values. For example, it's a mistake to use addUnixDiffTime with a value UnixDiffTime 0 9999999 as it will produce an incorrect value back. You should instead use functions such as microSecondsToUnixDiffTime to create values that are in-range. This avoids any gotchas when then doing comparisons.

Constructors

UnixDiffTime 

Fields

Instances
Eq UnixDiffTime Source # 
Instance details

Defined in Data.UnixTime.Types

Num UnixDiffTime Source #

Arithmetic operations where (1::UnixDiffTime) means 1 second.

>>> (3 :: UnixDiffTime) + 2
UnixDiffTime {udtSeconds = 5, udtMicroSeconds = 0}
>>> (2 :: UnixDiffTime) - 5
UnixDiffTime {udtSeconds = -3, udtMicroSeconds = 0}
>>> (3 :: UnixDiffTime) * 2
UnixDiffTime {udtSeconds = 6, udtMicroSeconds = 0}
Instance details

Defined in Data.UnixTime.Diff

Ord UnixDiffTime Source # 
Instance details

Defined in Data.UnixTime.Types

Real UnixDiffTime Source # 
Instance details

Defined in Data.UnixTime.Diff

Show UnixDiffTime Source # 
Instance details

Defined in Data.UnixTime.Types

diffUnixTime :: UnixTime -> UnixTime -> UnixDiffTime Source #

Calculating difference between two UnixTime.

>>> UnixTime 100 2000 `diffUnixTime` UnixTime 98 2100
UnixDiffTime {udtSeconds = 1, udtMicroSeconds = 999900}

addUnixDiffTime :: UnixTime -> UnixDiffTime -> UnixTime Source #

Adding difference to UnixTime.

>>> UnixTime 100 2000 `addUnixDiffTime` microSecondsToUnixDiffTime (-1003000)
UnixTime {utSeconds = 98, utMicroSeconds = 999000}

secondsToUnixDiffTime :: Integral a => a -> UnixDiffTime Source #

Creating difference from seconds.

>>> secondsToUnixDiffTime 100
UnixDiffTime {udtSeconds = 100, udtMicroSeconds = 0}

microSecondsToUnixDiffTime :: Integral a => a -> UnixDiffTime Source #

Creating difference from micro seconds.

>>> microSecondsToUnixDiffTime 12345678
UnixDiffTime {udtSeconds = 12, udtMicroSeconds = 345678}
>>> microSecondsToUnixDiffTime (-12345678)
UnixDiffTime {udtSeconds = -12, udtMicroSeconds = -345678}

Translating time