我想遍历从当前日期到某个停止日期的日期,例如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())
但是,我在球拍中看不到任何date calculation functions。该怎么办?
答案 0 :(得分:4)
如果您想使用racket/date
,则可以使用find-seconds
,seconds->date
,current-seconds
和简单的算法来实现目标:
#lang racket
(require racket/date
racket/generator)
(define 1day (* 60 60 24))
(define (count-dates year month day)
(define target (find-seconds 0 0 0 day month year))
(in-generator
(let loop ([current (current-seconds)])
(when (>= current target)
(yield (seconds->date current))
(loop (- current 1day))))))
(date-display-format 'iso-8601)
(for ([dt (count-dates 2019 2 1)])
(displayln (date->string dt)))
这将输出:
2019-02-11
2019-02-10
2019-02-09
2019-02-08
2019-02-07
2019-02-06
2019-02-05
2019-02-04
2019-02-03
2019-02-02
2019-02-01
也就是说,从今天(2019年2月11日)到2019年2月1日。
答案 1 :(得分:4)
在这里,您可以使用gregor
提供的日期算法来完成此操作。特别是+days
和-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-period
和-date-period
之类的功能。