get-decoded-time
これを使うと、日付情報を取得できる。ただ、多値関数なので、受け取りにmultiple-value-bindを使用する必要がある。簡単なサンプルは以下。
(defmacro get-base-time (&rest body) `(multiple-value-bind (second minute hour date month year day-of-week dst-p time-zone) (get-decoded-time) ,@body)) (defun get-time () (get-base-time (format t "~2,'0d:~2,'0d:~2,'0d ~a ~2,' d/~2,'0d/~d ~a (GMT~@d)" hour minute second (nth day-of-week *day-names*) month date year dst-p (- time-zone))))
いろいろな形で時刻を整形するシーンがありそうだから、multiple-value-bindの部分だけ分けてマクロにしてみた。ただ、これを呼び出す側がマクロで定義している変数を知らないとうまく使えないのが難点・・・やっぱり時間を表すクラスを作ってやるのがいいのだろうか。