home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / me34exe.zip / mutt / misc / date.mut < prev    next >
Text File  |  1995-01-14  |  2KB  |  94 lines

  1. ;; date.mut : Do some date calculations with the information supplied by
  2. ;; (read-clock).
  3. ;; C Durland    Public Domain
  4.  
  5. (defun
  6.   day-of-the-week (int weekday)        ;; 0 (Sunday) ... 6 (Saturday)
  7.   {
  8.     (switch weekday
  9.       0 "Sunday"
  10.       1 "Monday"
  11.       2 "Tuesday"
  12.       3 "Wednesday"
  13.       4 "Thursday"
  14.       5 "Friday"
  15.       6 "Saturday"
  16.       default ""
  17.     )
  18.   }
  19.   modulo (int n base) { (- n (* (/ n base) base)) }
  20.   zeller (int month day year)
  21.   {
  22.     ;; Compute day of week given any date. Algorithm by Zeller.
  23.     ;; Output can be used for (day-of-the-week)
  24.     ;; For example:
  25.     ;;   (small-int month day year hh mm ss)    ;; TimeInfo
  26.     ;;   (read-clock (loc month))
  27.     ;;   (msg "Today is " (day-of-the-week (zeller month day year)))
  28.  
  29.     (int y0 y1 y2 m1 dbuf)
  30.  
  31.     (m1 (+ (modulo (+ month 9) 12) 1))       ;; m1 = ((m+9) % 12) +1;
  32.     (y0 (if (<= month 2) (- year 1) year)) ;; y0 = (m <= 2) ? (y-1) : y;
  33.     (y1 (/ y0 100))               ;; y1 = y0/100;
  34.     (y2 (modulo y0 100))           ;; y2 = y0 % 100;
  35.  
  36.     (dbuf    ;; dbuf = ((26*m1 -2)/10 +d +y2 +y2/4 +y1/4 -2*y1) % 7;
  37.       (modulo
  38.     (- 
  39.       (+ (/ (- (* 26 m1) 2) 10) day y2 (/ y2 4) (/ y1 4))
  40.       (* 2 y1))
  41.     7))
  42.  
  43.     (if (< dbuf 0) (+ dbuf 7) dbuf)    ;; if (dbuf<0) dbuf += 7;
  44.   }
  45.   name-of-the-month (int month)        ;; 1=January...12=December
  46.   {
  47.     (switch month
  48.        1 "January"
  49.        2 "February"
  50.        3 "March"
  51.        4 "April"
  52.        5 "May"
  53.        6 "June"
  54.        7 "July"
  55.        8 "August"
  56.        9 "September"
  57.       10 "October"
  58.       11 "November"
  59.       12 "December"
  60.       default ""
  61.     )
  62.   }
  63.   divisible-by (int n x) { (== 0 (modulo n x)) }
  64.   leap-year (int year)
  65.   {
  66.     ;; A leap year is any year divisible by 400
  67.     ;; or any non-century year divisible by 4
  68.     (if (divisible-by year 400) { TRUE (done) })
  69.     (if (divisible-by year 100) { FALSE (done) })
  70.     (divisible-by year 4)
  71.   }
  72.   days-in-month (int month year)
  73.   {
  74.     ;; Remember that February is longer in a leap year
  75.     (+ 
  76.       (if (and (== 2 month) (leap-year year)) 0 1)
  77.       (switch month
  78.      1 31    ;; January
  79.      2 28    ;; February
  80.      3 31    ;; March
  81.      4 30    ;; April
  82.      5 31    ;; May
  83.      6 30    ;; June
  84.      7 31    ;; July
  85.      8 31    ;; August
  86.      9 30    ;; September
  87.     10 31    ;; October
  88.     11 30    ;; November
  89.     12 31    ;; December
  90.     default 0
  91.       ))
  92.   }
  93. )
  94.