続・月の平日を数える

続・月の平日を数えるlisp

((lambda (oy om od ny nm nd)
   ;基点日付作成
   (setq olddate (encode-universal-time 0 0 0 od om oy))
   (setq newdate (encode-universal-time 0 0 0 nd nm ny))
   ;初期値設定
   (setq x od)
   (setq cnt 0)
   (setq cnt2 0)
   ;祝日取得
   (setq holiday (make-vector 33))
   ;無限ループ
   (loop
     ;日時設定
     (setq date (encode-universal-time 0 0 0 x om oy))
     (multiple-value-bind (dmy dmy dmy d m y)
	 (decode-universal-time date)
       (ed::calendar-japanese-holiday y m holiday)
       (setq day d)
     )
     ;月が替わったら終了
     (if
	 (> date newdate)
	 (return)
     )
     ;日付を進める
     (setq x (+ x 1))
     ;日を出力
     (cond
      ((typep (aref holiday day) 'string)
       (setq cnt (+ cnt 1)))
      ((equalp (format-date-string "%v" date ) "土")
       (setq cnt (+ cnt 1)))
      ((equalp (format-date-string "%v" date ) "日")
       (setq cnt (+ cnt 1)))
      (t (setq cnt2 (+ cnt2 1)))
      )
     )
  (insert (format nil "土日祝日:~D~%平日:~D~%" cnt cnt2))
   )
 2010 12 15 2011 1 14)
土日祝日:14
平日:17
t

calendarex必須で、*calendar-japanese-holiday-list*に自社の休日も登録しとかないとあまり意味が無いです。

間違ってたから一回消して上げなおしたのは秘密