Brian Lloyd <Brian@digicool.com>
Function TimeStamp_yad(int y) in zope-2.1.4-src\lib\python\zodb\TimeStamp.c expects a 1900 based year (i.e. 0 = 1900, 2000=100, etc.), for positive agruments, when computing (y+300)/400.
TimeStamp_abst(int y, int mo, int d, int m, int s) seems to expect a 0 based year, on the other hand.
l = y%4==0 && (y%100 != 0 || y%400==0)
But it gets called with a 1900 based year in line 290 in function TimeStamp_timeTime(
TimeStamp_abst(TimeStamp_y-1900, TimeStamp_m- 1, TimeStamp_d-1,
Thanks for investigating this - because TimeStamp objects are used in the object database, I don't want to make any changes to this yet until I can talk to Jim and verify that the fix won't have any impact on ZODB code (mon. morning probably).
You might also look at TimeStamp_yad() (line 117 of the same file in 2.1.4):: static double TimeStamp_yad(int y) { double d, s; d=(y-1)*365; if (y > 0) { s=1.0; y=y-1; } else { s=-1.0; y = -y; } return d+s*(y/4-y/100+(y+300)/400); } I _think_ the last line should be:: return d+s*((y/4)-(y/100)+(y/400)); "every fourth year, except century years, except every fourth century". Perhaps the original was "working" to compensate the base 1900 vs. base 0? Tres. -- ========================================================= Tres Seaver tseaver@palladion.com 713-523-6582 Palladion Software http://www.palladion.com