* calc/calc-forms.el (math-leap-year-p): Fix formula for negative

year numbers.
(math-date-to-julian-dt): Adjust the initial approximation for the
year to deal with the new definition of the DATE.
This commit is contained in:
Jay Belanger 2012-11-18 23:03:08 -06:00
parent 6e9f7997b3
commit e8909bdc32
2 changed files with 15 additions and 5 deletions

View file

@ -1,3 +1,10 @@
2012-11-19 Jay Belanger <jay.p.belanger@gmail.com>
* calc/calc-forms.el (math-leap-year-p): Fix formula for negative
year numbers.
(math-date-to-julian-dt): Adjust the initial approximation for the
year to deal with the new definition of the DATE.
2012-11-19 Daniel Colascione <dancol@dancol.org>
* term/w32-win.el (cygwin-convert-path-from-windows): Accomodate

View file

@ -371,9 +371,10 @@
;;; These versions are rewritten to use arbitrary-size integers.
;;; A numerical date is the number of days since midnight on
;;; the morning of December 31, 1 B.C. Emacs's calendar refers to such
;;; a date as an absolute date, some function names also use that
;;; terminology. If the date is a non-integer, it represents a specific date and time.
;;; the morning of December 31, 1 B.C. (Gregorian) or January 2, 1 A.D. (Julian).
;;; Emacs's calendar refers to such a date as an absolute date, some Calc function
;;; names also use that terminology. If the date is a non-integer, it represents
;;; a specific date and time.
;;; A "dt" is a list of the form, (year month day), corresponding to
;;; an integer code, or (year month day hour minute second), corresponding
;;; to a non-integer code.
@ -408,8 +409,8 @@ DATE is the number of days since December 31, -1 in the Gregorian calendar."
(let* ((month 1)
day
(year (math-quotient (math-add date (if (Math-lessp date 711859)
365 ; for speed, we take
-108)) ; >1950 as a special case
367 ; for speed, we take
-106)) ; >1950 as a special case
(if (math-negp date) 366 365)))
; this result may be an overestimate
temp)
@ -494,6 +495,8 @@ Gregorian calendar."
(if (math-negp year)
(= (math-imod (math-neg year) 4) 1)
(= (math-imod year 4) 0))
(if (math-negp year)
(setq year (math-sub -1 year)))
(setq year (math-imod year 400))
(or (and (= (% year 4) 0) (/= (% year 100) 0))
(= year 0))))