今日は第何火曜日?
30分プログラム、その596。今日が第何火曜日かを調べるプログラム。
ウチのCATVターミナルは頭があまり良ろしくなくて、録画予約をするときは「第3火曜日の9:00〜」という指定しかできない。
というわけで、今日が第何火曜日かを調べる関数を書いてみる。あ、もちろん火曜日以外でも大丈夫で、指定した日が第n{日,月,火,水,木,金,土}曜日かを調べる関数ですよ。
使い方
6月のカレンダーはこうなっている。
6月 2009 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
;; 2009/6/2は0番目の火曜日 gosh> (date-week-day-number-of-month (make-day 2009 6 2)) 0 ;; 6月全部を調べてみる gosh> (check-june) 2009/06/1 ... 1 th 2009/06/2 ... 1 th 2009/06/3 ... 1 th 2009/06/4 ... 1 th 2009/06/5 ... 1 th 2009/06/6 ... 1 th 2009/06/7 ... 1 th 2009/06/8 ... 2 th 2009/06/9 ... 2 th 2009/06/10 ... 2 th 2009/06/11 ... 2 th 2009/06/12 ... 2 th 2009/06/13 ... 2 th 2009/06/14 ... 2 th 2009/06/15 ... 3 th 2009/06/16 ... 3 th 2009/06/17 ... 3 th 2009/06/18 ... 3 th 2009/06/19 ... 3 th 2009/06/20 ... 3 th 2009/06/21 ... 3 th 2009/06/22 ... 4 th 2009/06/23 ... 4 th 2009/06/24 ... 4 th 2009/06/25 ... 4 th 2009/06/26 ... 4 th 2009/06/27 ... 4 th 2009/06/28 ... 4 th 2009/06/29 ... 5 th 2009/06/30 ... 5 th
ソースコード
結構悩んだけど、実はすごく簡単。テストコードのほうが長い。
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; wofm.scm - ;; ;; Copyright(C) 2009 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2009/06/02 21:24:26 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (use srfi-19) (define (date-week-day-number-of-month date) (quotient (- (date-day date) 1) 7)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (use srfi-1) (define (today) (time-utc->date (current-time time-utc))) (define (make-day year month day) (make-date 0 ;; nano second 0 ;; second 0 ;; min 0 ;; hour day ;; day month year (date-zone-offset (today)))) (define (check-june) (for-each (lambda (day n) (print #`"2009/06/,day ... ,(+ 1 n) th")) (iota 30 1) (map date-week-day-number-of-month (map (cut make-day 2009 6 <>) (iota 30 1)))))