Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

It appears that Mathematica treats all dates as proleptic Gregorian dates by default, a hypothesis that can be easily tested by using AbsoluteTime to compute the Julian Day:

jd[t_] := AbsoluteTime[t]/86400 + 2.4150205*^6

but, while this works for recent dates and for some older ones, it yields results that differ from the correct result for some older dates by exactly a day

jd[{2012, 11, 24, 12}] - 2456256
0
jd[{1100, 11, 24, 12, 0, 0}] - 2123154
0
jd[{-3000, 11, 24, 12, 0, 0}] - 625660
1

notably for the reference date, 12:00 Universal Time on January 1, 4713 BCE in the proleptic Julian calendar (-4713-11-24 in the proleptic Gregorian calendar):

jd[{-4713, 11, 24, 12, 0, 0}]
1

What calendar is Mathematica using for these older dates, if not the proleptic Gregorian calendar?

Here, perhaps is another clue:

DateList[{-4713, 11, 24, 12, 0, 0}]
{-4713, 11, 25, 12, 0, 0}
DateList[{-3000, 11, 24, 12, 0, 0}]
{-3000, 11, 25, 12, 0, 0}

I'm no calendar expert, but this "canonicalization" doesn't map to any calendar I'm familiar with. Is this a bug?


Update: Version 9, behaves differently:

jd[{2012, 11, 24, 12}] - 2456256
0.
jd[{1100, 11, 24, 12, 0, 0}] - 2123154
0.
jd[{-3000, 11, 24, 12, 0, 0}] - 625660
365.

jd[{-4713, 11, 24, 12, 0, 0}]
366

and

DateList[{-4713, 11, 24, 12, 0, 0}]
{-4713, 11, 24, 12, 0, 0.}
DateList[{-3000, 11, 24, 12, 0, 0}]
{-3000, 11, 24, 12, 0, 0.}
share|improve this question
1  
I'm guessing it's just a bug. Similarly, AbsoluteTime[{2009,01,01,0,0,0}]-AbsoluteTime[{2008,12,31,23,59,59}] gives 1 instead of the correct 2, assuming the standard UTC+Gregorian. –  Mechanical snail Nov 25 '12 at 8:24
1  
@Mechanicalsnail: Yes, that's an additional issue, with leap seconds. –  raxacoricofallapatorius Nov 25 '12 at 15:01
1  
@Mechanicalsnail: AbsoluteTime[{2009, 01, 01, 0, 0, 0}] - AbsoluteTime[{2008, 12, 31, 23, 59, 59}] still gives 1, in version 9.0, rather than 2. –  raxacoricofallapatorius Nov 29 '12 at 18:28
2  
Wolfram support has confirmed that change of date by DateList was a bug in version 8. It remains to be seen why AbsoluteTime added a day in 8 and a year in 9. –  raxacoricofallapatorius Dec 8 '12 at 18:01
2  
Still there in version 10.0.0.0 –  rhermans Aug 1 '14 at 10:05

1 Answer 1

In version 10, I think that much of the behavior is simply a difference between how the year 0 is handled by astronomers (and therefore the page you were getting Julian Dates from) and everybody else.

For example, take this calculation:

jd[{-3000, 11, 24, 12, 0, 0}] - 625660

I believe that you have actually pulled the wrong number from the website due to a year 0 issue. Consider this:

(AbsoluteTime[{1, 1, 1, 12}] - AbsoluteTime[{-1, 1, 1, 12}])/86400

366

Note that Mathematica will return a result consistent with the Gregorian/Julian calendars where there is no year 0. But, your link reports that the Julian Day of 1,1,1,12 is:

1721426

and the Julian day of -1,1,1,12 is:

1720695

a difference of 2 years. This is consistent with how an astronomy specific app should work. If you account for this difference in years, I believe that the results will be consistent (in Mathematica 10, past results were just incorrect, as noted in comments).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.