INT(x) = [x] NOTE: some computer languages have a different definition.
FIX(x) = the number x without its fraction. For example, FIX(-1.5)=-1
x\y = FIX(x/y)
Z = RD + 306
G = Z - .25
A = INT(G / 36524.25)
B = A - INT(A / 4)
year = INT((B+G) / 365.25)
C = B + Z - INT(365.25 * year)
month = FIX((5 * C + 456) / 153)
day = C - FIX((153 * month - 457) / 5)
IF month > 12 THEN
year = year + 1
month = month - 12
END IF
COMMENTS:
Z = RD + 306
H = 100*Z - 25
A = INT(H / 3652425)
B = A - INT(A / 4)
year = INT((100*B+H) / 36525)
C = B + Z - 365 * year - INT( year/4)
month = FIX((5 * C + 456) / 153)
day = C - FIX((153 * month - 457) / 5)
IF month > 12 THEN
year = year + 1
month = month - 12
END IF
COMMENTS:
****WARNING*** Only valid for RD greater than or equal to -305 (March 2 of the year zero).
Z = RD + 306
H = 100*Z - 25
A = H \ 3652425)
B = A - SHIFTRIGHT(A,2)
year = (100*B+H)) \ 36525
C = B + Z - 365 * year - SHIFTRIGHT( year,2)
month = SHIFTRIGHT((535*C + 48950),14)
day = C - SHIFTRIGHT( (979*M-2918),5)
IF month > 12 THEN
year = year + 1
month = month - 12
END IF
COMMENTS:
Note: & indicates 32-bit (long) integer and # indicates double precision real
SUB inrata (rd AS LONG, year AS LONG, month AS INTEGER, day AS INTEGER)
'INPUT: rd = Rata Die Number
'OUTPUT: Gregorian year, month, and day
'standard real arithmetic
Z& = rd + 306 'Day 1 is on January 1 of the year 1
G# = Z& - .25#
A& = INT(G# / 36524.25#) 'whole centuries
B& = A& - INT(A& / 4#) 'Julian days in whole centuries - 0.25
year = INT((G# + B&) / 365.25#)
C& = Z& + B& - INT(365.25 * year)'days in the year
month = (5 * C& + 456) \ 153
day = C& - ((153 * month - 457) \ 5)
IF month > 12 THEN 'convert to year that starts January 1
year = year + 1
month = month - 12
END IF 'convert to year that starts January 1
END SUB
SUB inrata2 (rd AS LONG, year AS LONG, month AS INTEGER, day AS INTEGER)
'INPUT: rd = Rata Die Number
'OUTPUT: Gregorian year, month, and day
'***WARNING*** ONLY VALID IF RD > -306 (March 1 of year zero)
'INPUT: rd = Julian Day Number
'OUTPUT: Gregorian year, month, and day
Z& = rd + 306 'Day 1 is on March 1 of the year 0
H& = 100*Z& - 25
A& = H&\3652425 'whole centuries
B& = A& - A&\4 'adjustment to find the Julian days in whole centuries
year = (100*B&+H&) \ 36525
C& = B& + Z& - 365 * year - year\4 'days in the year
month = (5 * C& + 456) \ 153
day = C& - (153 * month - 457) \ 5
IF month > 12 THEN 'convert to year that starts January 1
year = year + 1
month = month - 12
END IF 'convert to year that starts January 1
END SUB