在Haskell中创建从开始/结束日期开始的日期列表



从以下日期范围开始:

startDate = "2020-01-01"
endDate = "2021-01-01"

创建一个从开始到结束的日期列表最合适的方法是什么,比如说,每周?

result = ["2020-01-01", "2020-01-08", "2020-01-15", "2020-01-22"] -- and so on until 2021-01-01
import Data.Time.Calendar
main :: IO ()
main = print [fromGregorian 2020 1 1, fromGregorian 2020 1 8 .. fromGregorian 2021 1 1]
[2020-01-01,2020-01-08,2020-01-15,2020-01-22,2020-01-29,2020-02-05,2020-02-12,2020-02-19,2020-02-26,2020-03-04,2020-03-11,2020-03-18,2020-03-25,2020-04-01,2020-04-08,2020-04-15,2020-04-22,2020-04-29,2020-05-06,2020-05-13,2020-05-20,2020-05-27,2020-06-03,2020-06-10,2020-06-17,2020-06-24,2020-07-01,2020-07-08,2020-07-15,2020-07-22,2020-07-29,2020-08-05,2020-08-12,2020-08-19,2020-08-26,2020-09-02,2020-09-09,2020-09-16,2020-09-23,2020-09-30,2020-10-07,2020-10-14,2020-10-21,2020-10-28,2020-11-04,2020-11-11,2020-11-18,2020-11-25,2020-12-02,2020-12-09,2020-12-16,2020-12-23,2020-12-30]

[我不是这个Show实例BTW的真正粉丝,因为这完全不明智的Haskell代码…]

您可以使用Data.Time.Calendar中的(fromGregonorianValid,addDays(

import Data.Time.Calendar
import Data.Time
getDates :: String -> String -> [String]
getDates from to
| null jdateFrom || null jdateTo = error "error in dates"
| otherwise = map show  [dateFrom,addDays 7 dateFrom..dateTo]
where
jdateFrom = getDate from
jdateTo = getDate to
(Just dateFrom) = getDate from
(Just dateTo) = getDate to
getDate dateStr = parseTimeM True defaultTimeLocale "%Y-%-m-%-d" dateStr :: Maybe Day

> getDates "2020-01-01" "2021-01-01"
["2020-01-01","2020-01-08","2020-01-15","2020-01-22","2020-01-29","2020-02-05","2020-02-12","2020-02-19","2020-02-26","2020-03-04","2020-03-11","2020-03-18","2020-03-25","2020-04-01","2020-04-08","2020-04-15","2020-04-22","2020-04-29","2020-05-06","2020-05-13","2020-05-20","2020-05-27","2020-06-03","2020-06-10","2020-06-17","2020-06-24","2020-07-01","2020-07-08","2020-07-15","2020-07-22","2020-07-29","2020-08-05","2020-08-12","2020-08-19","2020-08-26","2020-09-02","2020-09-09","2020-09-16","2020-09-23","2020-09-30","2020-10-07","2020-10-14","2020-10-21","2020-10-28","2020-11-04","2020-11-11","2020-11-18","2020-11-25","2020-12-02","2020-12-09","2020-12-16","2020-12-23","2020-12-30"]

最新更新