如何获取Haskell上个月的开始时间?

问题描述

我想获取相对于当前时间的上个月的“开始”时间(在月初的时间)。

我该怎么做?

解决方法

使用UTCTime我们可以定义一个函数:

import Data.Time

getStartOfPreviousMonth :: UTCTime -> UTCTime 
getStartOfPreviousMonth v = do
  let (y,m,_) = (toGregorian $ utctDay v)
  let v' = addGregorianMonthsClip (-1) $ fromGregorian y m 1
  v { utctDay = v',utctDayTime = secondsToDiffTime 0
    }

可以像这样使用:

> import Data.Time
Data.Time> ct <- getCurrentTime
Data.Time> getStartOfPreviousMonth ct
2020-07-01 00:00:00 UTC