Julian Day

This small note contains two functions for performing date arithmetic: [[(julian year month day)]] converts a calendar date to the number of days since Monday, January, 1, 4713 BC, and [[(gregorian julian)]] performs the opposite calculation, returning [[(values year month day)]]. The calculations were stolen from the Wikipedia entry for Julian Day at [[http://en.wikipedia.org/wiki/Julian_day]]. Also see that page for numerous warnings about the applicability of the code. (define (julian year month day) (let* ((a (quotient (- 14 month) 12)) (y (+ year 4800 (- a))) (m (+ month (* 12 a) -3))) (+ day (quotient (+ (* 153 m) 2) 5) (* 365 y) (quotient y 4) (- (quotient y 100)) (quotient y 400) (- 32045)))) (define (gregorian julian) (let* ((j (+ julian 32044)) (g (quotient j 146097)) (dg (modulo j 146097)) (c (quotient (* (+ (quotient dg 36524) 1) 3) 4)) (dc (- dg (* c 36524))) (b (quotient dc 1461)) (db (modulo dc 1461)) (a (quotient (* (+ (quotient db 365) 1) 3) 4)) (da (- db (* a 365))) (y (+ (* g 400) (* c 100) (* b 4) a)) (m (- (quotient (+ (* da 5) 308) 153) 2)) (d (+ da (- (quotient (* (+ m 4) 153) 5)) 122)) (year (+ y (- 4800) (quotient (+ m 2) 12))) (month (+ (modulo (+ m 2) 12) 1)) (day (+ d 1))) (values year month day)))