From: Markus S. <mar...@gm...> - 2006-05-30 22:50:30
|
I did a bit of sniffing around the ICU code and may have found a bug - I would like someone to confirm or deny. According to utmscale.c, there are 62135769600 seconds = 719164 days between 00010101 and 19700101. (timeScaleTable[UDTS_UNIX_TIME=1][UTSV_EPOCH_OFFSET_VALUE=1]) According to my own calculation, there are 62135596800 seconds = 719162 days between 00010101 and 19700101. This is two days fewer. Someone else here confirmed my number through his own calculation, burned into their code. Why would ICU be two days off? How did we arrive at that constant when we wrote the code? Could someone please write a few lines of .Net code and tell me what System.DateTime value they get for 1970-jan-01 00:00:00? (It should be one or the other seconds value above, times 10^7.) Here is my own calculation: From 00010101 to 19700101 there are 1969 years, times 365 days plus 1968/4 leap years=leap days minus 19 centuries without leap years plus 4 leap days every 400 years (in 400, 800, 1200, 1600) (This uses the proleptic Gregorian calendar.) Thanks, markus -- Opinions expressed here may not reflect my company's positions unless otherwise noted. |