今天和另一个约会之间的日期

时间:2015-05-23 02:41:38

标签: date haskell monads

我正在烧我的大脑试图创建一个功能,让我在今天的日期和给定的日期之间有大量的日子。

可能今天功能:

today = fmap (formatTime defaultTimeLocale "%Y-%m-%d") getCurrentTime

并考虑使用diffDays,但无法使其与 :: Day 日期一起使用

任何想法?

1 个答案:

答案 0 :(得分:5)

您的formatTime版本会返回一个字符串,但您想要一个Day(当您检查它时,它看起来像您的字符串,但完全是另一种类型)。以下是编写today函数的一种方法,使用utctDayDay中获取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