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