日付に対する加算


Tags: 日付と時刻, R6RS, SRFI

日付に対する加算

日付と数値を直接演算することはできないので、日付を時間に変換し、数値(秒数)を期間を表す時間オブジェクトに変換したうえで計算し、日付に戻す。

(import (rnrs) (srfi :19))

;; 日付 date の seconds 秒後の日付を返す。閏秒は考えない。
(define (date-add-second date seconds)
  (time-utc->date
   (add-duration (date->time-utc date)
                 (make-time time-duration 0 seconds))))

(date-add-second (current-date) 1) ; 1 秒後
(date-add-second (current-date) -5) ; 5 秒前
(date-add-second (current-date) (* 60 60 24)) ; 1 日後
(date-add-second (current-date) (* 60 60 24 7)) ; 1 週間後

閏秒を考える場合には date->time-utc ではなく、 date->time-tai を使う。ただしその場合、上のプログラムでは 1 日、 1 週間といった期間は厳密ではなくなる。