You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中如何基于起止日期生成按周间隔的日期序列

Haskell按周间隔生成日期列表实现

我们可以直接使用Haskell官方标准的time库完成需求,无需引入额外第三方依赖,实现逻辑简洁高效:

完整实现代码

-- 导入日期处理核心模块
import Data.Time (Day, parseTimeM, defaultTimeLocale, addDays, formatTime)

-- 输入的日期字符串定义
startDateStr :: String
startDateStr = "2020-01-01"
endDateStr :: String
endDateStr = "2021-01-01"

-- ISO标准日期字符串转Day类型,确认输入格式合法时可直接使用,生产环境可补充错误处理逻辑
parseIsoDate :: String -> Day
parseIsoDate = parseTimeM True defaultTimeLocale "%Y-%m-%d"

-- 解析后的日期类型变量
startDate :: Day
startDate = parseIsoDate startDateStr
endDate :: Day
endDate = parseIsoDate endDateStr

-- 生成按周间隔的日期序列
weeklyDateList :: [Day]
weeklyDateList = takeWhile (<= endDate) $ iterate (addDays 7) startDate

-- 转为目标字符串格式的最终结果
result :: [String]
result = map (formatTime defaultTimeLocale "%Y-%m-%d") weeklyDateList

逻辑说明

  • 首先把字符串格式的起止日期转为Day类型,方便做日期运算
  • 用iterate (addDays 7) startDate生成从起始日期开始、每次加7天的无限日期序列
  • 用takeWhile (<= endDate)截取所有不晚于结束日期的元素,刚好覆盖到2021-01-01为止
  • 最后把Day类型统一格式化为YYYY-MM-DD格式的字符串,完全匹配需求的输出样式
    如果你需要处理日期解析可能失败的场景,可以把parseIsoDate的返回值改为Maybe Day或者Either String Day类型,增加异常捕获逻辑适配生产环境。

内容的提问来源于stack exchange,提问作者Jivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 12:06:04