Gaucheプログラミング(立読み版) > 第2部: 実用 > スケジュールCGIを書こう > 時間型と日付型 > 日数(=日付の差)を計算する


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

日数(=日付の差)を計算する 応援する 

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手続きについては「正確数と非正確数の変換」で説明します。


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation