home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 5 Edit
/
05-Edit.zip
/
me34src.zip
/
me3
/
mutt
/
misc
/
date.mut
< prev
next >
Wrap
Text File
|
1995-01-14
|
2KB
|
94 lines
;; date.mut : Do some date calculations with the information supplied by
;; (read-clock).
;; C Durland Public Domain
(defun
day-of-the-week (int weekday) ;; 0 (Sunday) ... 6 (Saturday)
{
(switch weekday
0 "Sunday"
1 "Monday"
2 "Tuesday"
3 "Wednesday"
4 "Thursday"
5 "Friday"
6 "Saturday"
default ""
)
}
modulo (int n base) { (- n (* (/ n base) base)) }
zeller (int month day year)
{
;; Compute day of week given any date. Algorithm by Zeller.
;; Output can be used for (day-of-the-week)
;; For example:
;; (small-int month day year hh mm ss) ;; TimeInfo
;; (read-clock (loc month))
;; (msg "Today is " (day-of-the-week (zeller month day year)))
(int y0 y1 y2 m1 dbuf)
(m1 (+ (modulo (+ month 9) 12) 1)) ;; m1 = ((m+9) % 12) +1;
(y0 (if (<= month 2) (- year 1) year)) ;; y0 = (m <= 2) ? (y-1) : y;
(y1 (/ y0 100)) ;; y1 = y0/100;
(y2 (modulo y0 100)) ;; y2 = y0 % 100;
(dbuf ;; dbuf = ((26*m1 -2)/10 +d +y2 +y2/4 +y1/4 -2*y1) % 7;
(modulo
(-
(+ (/ (- (* 26 m1) 2) 10) day y2 (/ y2 4) (/ y1 4))
(* 2 y1))
7))
(if (< dbuf 0) (+ dbuf 7) dbuf) ;; if (dbuf<0) dbuf += 7;
}
name-of-the-month (int month) ;; 1=January...12=December
{
(switch month
1 "January"
2 "February"
3 "March"
4 "April"
5 "May"
6 "June"
7 "July"
8 "August"
9 "September"
10 "October"
11 "November"
12 "December"
default ""
)
}
divisible-by (int n x) { (== 0 (modulo n x)) }
leap-year (int year)
{
;; A leap year is any year divisible by 400
;; or any non-century year divisible by 4
(if (divisible-by year 400) { TRUE (done) })
(if (divisible-by year 100) { FALSE (done) })
(divisible-by year 4)
}
days-in-month (int month year)
{
;; Remember that February is longer in a leap year
(+
(if (and (== 2 month) (leap-year year)) 0 1)
(switch month
1 31 ;; January
2 28 ;; February
3 31 ;; March
4 30 ;; April
5 31 ;; May
6 30 ;; June
7 31 ;; July
8 31 ;; August
9 30 ;; September
10 31 ;; October
11 30 ;; November
12 31 ;; December
default 0
))
}
)