[comp.misc] Need calendar algorithms

ben@hpcvlx.HP.COM (Benjamin Ellsworth) (12/30/88)

I am looking for a bunch of calendar algorithms.  I especially need to
be able to get the difference between two dates with times.  Does
anybody know where I can find these algorithms?

-----------------------------------------------------------------------
Benjamin Ellsworth      | ben%hpcvlx@hplabs.hp.com     | INTERNET
Hewlett-Packard Company | {backbone}!hplabs!hpcvlx!ben | UUCP
1000 N.E. Circle        | (USA) (503) 750-4980         | FAX
Corvallis, OR 97330     | (USA) (503) 757-2000         | VOICE
-----------------------------------------------------------------------
                     All relevant disclaimers apply.
-----------------------------------------------------------------------

aberg@math.rutgers.edu (Hans Aberg) (12/31/88)

The easiest way to compute the time difference between two dates,
and also the date for recurrent phenomena, is to convert the dates
into the astronomical Julian Day Number. Here are the rules for those:

Rules for computing the Julian day number,
used in astronomy:
1. Day 0 = Jan. 1, 4713 B.C., a leap year.
   (In astronomy, this is the time at 12 PM
   in Greenwich, with the decimals giving
   fractions of the day.)
2. Every fourth year, until Oct.4, 1582, is a
   leap year. After this date the exception 5.
   below is made.
3. There is no year zero.
   (In astronomy, year 0 = 1 B.C.)
4. Oct.4, 1582, is directly followed by
   Oct.15, 1582 (ten days missing), when the
   Gregorian calendar was introduced.
5. After Oct.15, 1582, the full hundred years
   1600, 1700, 1800, and so forth, are only 
   leap years when divisible by 400.
6. Day of week is given by Julian day number
   modulo 7, Monday = 0, Sunday = 6.

These rules, and many others, are to be found
in a book, with a title something "... calendars
... ephemeral times ...". Check the reference 
section in a research library.

Hewlett-Packard algorithm, from HP67 manual:
Dates between March 1,1900,and February 28, 2100.

y' := year-1    if month = 1 or 2
      year      otherwise.
m' := month+13  if month = 1 or 2
      month+1   otherwise.
d  := day.

Julian Day # = int(365.25ay')+int(30.6001am')+d+1720982.

Hans Aberg
Mathematics, Rutgers University