unix-time-0.4.7: Unix time parser/formatter and utilities
Safe HaskellNone
LanguageHaskell2010

Data.UnixTime

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

Instances details
Eq UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Methods

(==) :: UnixTime -> UnixTime -> Bool

(/=) :: UnixTime -> UnixTime -> Bool

Ord UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Methods

compare :: UnixTime -> UnixTime -> Ordering

(<) :: UnixTime -> UnixTime -> Bool

(<=) :: UnixTime -> UnixTime -> Bool

(>) :: UnixTime -> UnixTime -> Bool

(>=) :: UnixTime -> UnixTime -> Bool

max :: UnixTime -> UnixTime -> UnixTime

min :: UnixTime -> UnixTime -> UnixTime

Show UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Methods

showsPrec :: Int -> UnixTime -> ShowS

show :: UnixTime -> String

showList :: [UnixTime] -> ShowS

Storable UnixTime Source # 
Instance details

Defined in Data.UnixTime.Types

Methods

sizeOf :: UnixTime -> Int

alignment :: UnixTime -> Int

peekElemOff :: Ptr UnixTime -> Int -> IO UnixTime

pokeElemOff :: Ptr UnixTime -> Int -> UnixTime -> IO ()

peekByteOff :: Ptr b -> Int -> IO UnixTime

pokeByteOff :: Ptr b -> Int -> UnixTime -> IO ()

peek :: Ptr UnixTime -> IO UnixTime

poke :: Ptr UnixTime -> UnixTime -> IO ()

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

Instances details
Eq UnixDiffTime Source # 
Instance details

Defined in Data.UnixTime.Types

Methods

(==) :: UnixDiffTime -> UnixDiffTime -> Bool

(/=) :: UnixDiffTime -> UnixDiffTime -> Bool

Num UnixDiffTime

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 
Instance details

Defined in Data.UnixTime.Diff

Methods

toRational :: UnixDiffTime -> Rational

Show UnixDiffTime Source # 
Instance details

Defined in Data.UnixTime.Types

Methods

showsPrec :: Int -> UnixDiffTime -> ShowS

show :: UnixDiffTime -> String

showList :: [UnixDiffTime] -> ShowS

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

fromEpochTime :: EpochTime -> UnixTime Source #

From EpochTime to UnixTime setting utMicroSeconds to 0.

toEpochTime :: UnixTime -> EpochTime Source #

From UnixTime to EpochTime ignoring utMicroSeconds.

fromClockTime :: ClockTime -> UnixTime Source #

From ClockTime to UnixTime.

toClockTime :: UnixTime -> ClockTime Source #

From UnixTime to ClockTime.