Haskell:将Day转换为UNIX时间戳

问题描述 投票:1回答:2

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

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

但这不起作用,因为formatTime返回一个空字符串。

haskell time timestamp
2个回答
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

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
© www.soinside.com 2019 - 2024. All rights reserved.