今天和另一个日期之间的日期
Dates between today and another date
我正在绞尽脑汁想做一个函数来计算今天和给定日期之间的天数。
可能今天函数:
today = fmap (formatTime defaultTimeLocale "%Y-%m-%d") getCurrentTime
并考虑使用 diffDays
,但无法使用 ::Day 日期
有什么想法吗?
你的 formatTime
版本 returns 一个字符串,但你想要一个 Day
(当你检查它时它看起来像你的字符串,但完全是不同的类型)。这是编写 today
函数的一种方法,使用 utctDay
从 UTCTime
中获取 Day
:
import Data.Time.Calendar
import Data.Time.Clock
today :: IO Day
today = fmap utctDay getCurrentTime
这里有一个使用它的 days-from-today 函数(我给出了较短的名称 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
给定一个 shorthand 常用相对日期的函数:
tomorrow :: IO Day
tomorrow = fmap (addDays 1) today
我们可以证明安妮论文的正确性:
ghci> tomorrow >>= daysAway
1
我正在绞尽脑汁想做一个函数来计算今天和给定日期之间的天数。
可能今天函数:
today = fmap (formatTime defaultTimeLocale "%Y-%m-%d") getCurrentTime
并考虑使用 diffDays
,但无法使用 ::Day 日期
有什么想法吗?
你的 formatTime
版本 returns 一个字符串,但你想要一个 Day
(当你检查它时它看起来像你的字符串,但完全是不同的类型)。这是编写 today
函数的一种方法,使用 utctDay
从 UTCTime
中获取 Day
:
import Data.Time.Calendar
import Data.Time.Clock
today :: IO Day
today = fmap utctDay getCurrentTime
这里有一个使用它的 days-from-today 函数(我给出了较短的名称 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
给定一个 shorthand 常用相对日期的函数:
tomorrow :: IO Day
tomorrow = fmap (addDays 1) today
我们可以证明安妮论文的正确性:
ghci> tomorrow >>= daysAway
1