首页 > 解决方案 > 如何在球拍中循环日期?

问题描述

我想遍历从当前日期到某个停止日期的日期,例如 Python 中的以下示例:

import datetime

def count_dates(stop_date):
    step = datetime.date.today()
    while step >= stop_date:
        yield step
        step = step - datetime.timedelta(days=1)

def main():
    for step in count_dates(datetime.date(2018, 1, 1)):
        print(step.isoformat())

但是,我在 Racket 中没有看到任何日期计算功能。如何才能做到这一点?

标签: dateracket

解决方案


以下是使用gregor. 具体来说,+daysand-days函数在这里很有帮助:

#lang racket

(require gregor
         racket/generator)

;; Date -> [Sequenceof Date]
(define (count-dates stop-date)
  (in-generator
   (let loop ([step (today)])
     (when (date>=? step stop-date)
       (yield step)
       (loop (-days step 1))))))

(for ([step (count-dates (date 2018 1 1))])
  (displayln (date->iso8601 step)))

如果您需要比“一些天数”更通用的东西,还有像+date-periodand之类的功能-date-period


推荐阅读