グレゴリオ暦からユリウス日を計算する


ユリウス日とは紀元前4713年1月1日正午(世界標準時)からの日数です。

 (import (rnrs))
 (define (gregorian->julian-day year month day)
   (let* ((a (div (- 14 month) 12))
          (y (- (+ year 4800) a))
          (m (- (+ month (* 12 a)) 3)))
     (- (+ day
           (div (+ (* 153 m) 2) 5)
           (* 365 y)
           (div y 4)
           (div y 400))
        (div y 100) 32045)))

srfi-19にも変換関数があります。(正午で切り替わるので、make-dateのhourに12を渡しています。)

  (date->julian-day (make-date 0 0 0 12 day month year 0))