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
    
I can't test now, but just on a hunch: if you're on a Linux system, could you compare what happens if you use Unix time (e.g. via Get["!date +%s"]) to compute JD? –  J. M. Nov 25 '12 at 4:15
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
show 9 more comments

Your Answer

 
discard

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

Browse other questions tagged or ask your own question.