-- | -- Module : Foreign.Erlang.OTP -- Copyright : (c) Eric Sessoms, 2008 -- (c) Artúr Poór, 2015 -- (c) Arnold Szederjesi-Dragomir, 2021 -- License : GPL3 -- -- Maintainer : szederjesiarnold@gmail.com -- Stability : experimental -- Portability : portable -- module Foreign.Erlang.Utilities ( -- * Miscellaneous utilities erlangTimeToSeconds , secondsToErlangTime ) where import Foreign.Erlang.Types (ErlType(..)) -- Erlang's native time format is a tuple: {MegaSeconds, Seconds, -- MicroSeconds}. Luckily though, Erlang uses the same epoch, so no -- further conversion is necessary. -- | Convert a tuple (from @erlang:now()@) to seconds from Jan 1, 1970. erlangTimeToSeconds :: Integral a => ErlType -> a erlangTimeToSeconds (ErlTuple [ErlInt ms, ErlInt s, _]) = fromIntegral $ 1000000*ms + s -- | Convert seconds to an Erlang tuple representing time. secondsToErlangTime :: Integral a => a -> ErlType secondsToErlangTime sec = ErlTuple [ErlInt ms, ErlInt s, ErlInt 0] where (ms, s) = fromIntegral sec `divMod` 1000000