日数(=日付の差)を計算する 応援する  srfi-19ライブラリの<date>型を使って日数の差を計算するには、改訂ユリウス日に変換してから差を求めます。
例: 2007年8月31日と2006年12月31日の差を求める
gosh> (define date1 (make-date 0 0 0 0 31 8 2007 (date-zone-offset (current-date))))
date1
gosh> date1
#<date 2007/08/31 00:00:00.000000000 (32400)>
gosh> (define date2 (make-date 0 0 0 0 31 12 2006 (date-zone-offset (current-date))))
date2
gosh> date2
#<date 2006/12/31 00:00:00.000000000 (32400)>
gosh> (- (date->modified-julian-day date1) ;; 改訂ユリウス日に変換して計算
(date->modified-julian-day date2))
243.0
注意: 改訂ユリウス日は浮動小数点数として得られるので、正確な日数を得るには整数に変換する必要があります。
例:
gosh> (inexact->exact
(- (date->modified-julian-day date1)
(date->modified-julian-day date2)))
243
この例では浮動小数点数の243.0を正確な日数に変換するために、inexact->exact手続きを使っています。inexact->exact手続きについては「正確数と非正確数の変換」で説明します。
| |
|