Converting Gregorian Date to Gregorian Days
Date: 02/27/2003 at 14:09:39 From: Logan Subject: Converting Gregorian Date to Gregorian days I'm trying to convert a Gregorian date (e.g. Feb. 10, 1788) to the number of days that has passed since the implementation of the Gregorian Calender on October 15, 1582 (this being day 1). For example October 17th, 1582 would be day 3, and March 3, 2003 would be day 153542. I've converted the number of days from the year inputted to 1583, and added 1 day for leap years divisible by 4, subtracted 1 day for years ending in 100, and then added 1 day for years divisible by 400, but I am having problems adding the months and days of the month, etc. Any help would be greatly appreciated.
Date: 02/28/2003 at 21:36:27 From: Doctor Fenton Subject: Re: Converting Gregorian Date to Gregorian days Hi Logan, Thanks for writing to Dr. Math. The simplest way I know to do the calculation you are looking for is to use the Julian Day system. This is a continuous count of days from January 1, 4713 B.C. and, surprisingly, it is fairly easy to compute. The following algorithm is adapted from Jean Meeus' "Astronomical Formulae for Calculators." In the following, int(x) means the integer (whole number) part of x: int(4.25) = 4; int(-1.7) = -1; etc. Given a year YYYY, a month MM, and a day D, if the month is January or February (M=1 or 2), replace let y = YYYY-1 and let m = M+13. Otherwise, let y = YYYY and m = M+1. Compute A = int(y/100), and let B = 2 - A + int(A/4). Then the Julian Day number JD of this date is JD = int(365.25*y) + int(30.6001*m) + B + D + 1720995. For example, for Feb. 28, 2003, YYYY=2003, M=2, and D=28, so y = 2002, m=15, A = 20, and B = -13, so JD = int(365.25*2002) + int(30.6001*15) + 28 - 13 + 1720995 = int(731230.5) + int(459.0015) + 28 - 13 + 1720995 = 731230 + 459 + 28 - 13 + 1720995 = 2452699 while for July 4, 2001, YYYY=2001, M=7, and D= 4, so y = 2001, m = 8, A = 20, and again B = -13. Then JD = int(365.25*2001) + int(30.6001*8) + 4 - 13 + 1720995 = int(730865.25) + int(244.8008) + 4 - 13 + 1720995 = 2452095. Day 1 of the Gregorian calendar was Oct. 15, 1582, whose JD is JD = 2299161, so the JD of the last day of the Julian calendar was JD = 2299160. So, compute the JD of the day you are interested in, and subtract 2299160, and that will give you the number of days since the beginning of the Gregorian calendar. If you use this on historical dates, remember that the Gregorian calendar wasn't adopted everywhere on Oct. 15, 1582. It wasn't adopted in British colonies until about 1752, and in Russia after the 1917 revolution (which is why it is called the "October Revolution," even though it occurred in November in the Gregorian calendar). This formula only works for Gregorian dates. If you have a Julian calendar date, i.e. before Oct. 15, 1582 (the previous day had the Julian calendar date Oct. 4, 1582, you set B = 0). There's another correction for years B.C., but all the Gregorian rules are incorporated in this formula. If you have any questions, please write back and I will try to explain further. - Doctor Fenton, The Math Forum http://mathforum.org/dr.math/
Date: 06/06/2003 at 06:36:55 From: David Subject: What about BC? Is there an additional correction for years B.C.? -David
Date: 06/06/2003 at 17:36:35 From: Doctor Fenton Subject: Re: What about BC? Hi David, In this system, 1 AD is the year 1, 1 BC (or BCE) is the year 0, and 2 BC (BCE) is the year -1, etc. For negative years, Meeus says to replace the term int(365.25*y) by int(365.25*y - .75) . To test your implementation, May 29 in the year -584 should be JD 1507900.5 (Meeus actually uses May 28.63 to get JD 1507900.13 .) If you have any questions, please write back and I will try to explain further. - Doctor Fenton, The Math Forum http://mathforum.org/dr.math/
Search the Dr. Math Library:
Ask Dr. MathTM
© 1994- The Math Forum at NCTM. All rights reserved.