我正在烧我的大脑试图创建一个功能,让我在今天的日期和给定的日期之间有大量的日子。
可能今天功能:
today = fmap (formatTime defaultTimeLocale "%Y-%m-%d") getCurrentTime
并考虑使用diffDays
,但无法使其与 :: Day 日期一起使用
任何想法?
答案 0 :(得分:5)
您的formatTime
版本会返回一个字符串,但您想要一个Day
(当您检查它时,它看起来像您的字符串,但完全是另一种类型)。以下是编写today
函数的一种方法,使用utctDay
从Day
中获取UTCTime
:
import Data.Time.Calendar
import Data.Time.Clock
today :: IO Day
today = fmap utctDay getCurrentTime
这是一个使用它的日常功能(我给出了较短的名称daysAway
):
daysAway :: Day -> IO Integer
daysAway day = fmap (diffDays day) today
如果您始终将目标指定为日历日期,则可以轻松地完成此操作:
daysToDate :: Integer -> Int -> Int -> IO Integer
daysToDate year month day = daysAway $ fromGregorian year month day
给出了一个普遍需要的相对日的速记函数:
tomorrow :: IO Day
tomorrow = fmap (addDays 1) today
我们可以证明安妮论文的正确性:
ghci> tomorrow >>= daysAway
1