Haskell:将Day转换为UNIX时间戳

时间:2017-12-20 21:54:14

标签: haskell time timestamp

如何获取“一周前”的UNIX时间戳?目前我这样做:

import Data.Time
...
oneWeekAgo = toTimestamp . addDays (-7) <$> now
  where now = utctDay <$> getCurrentTime
        toTimestamp = formatTime defaultTimeLocale "%s"

但这不起作用,因为formatTime正在返回字符串。

2 个答案:

答案 0 :(得分:2)

我不确定您想要什么,但您可能希望修改utctDay并使用utcTimeToPOSIXSecondsUTCTime转换为posix时间戳。

import Data.Time
import Data.Time.Clock.POSIX

oneWeekAgo = do now <- getCurrentTime
                let oneWeekAgo = now { utctDay = addDays (-7) $ utctDay now }
                return $ utcTimeToPOSIXSeconds oneWeekAgo

或者只是减去秒数也可以。

oneWeekAgo = ((subtract (7 * 24 * 60 * 60)) . utcTimeToPOSIXSeconds) <$> getCurrentTime

答案 1 :(得分:0)

我刚才提出的解决方案是使用UTCTime day 0将日值转换回来。

import Data.Time
...
oneWeekAgo = toTimestamp . toTime . addDays (-7) <$> now
  where now = utctDay <$> getCurrentTime
        toTimestamp = formatTime defaultTimeLocale "%s"
        toTime day = UTCTime day 0