ファイルのタイムスタンプを取得【その1】
get-decoded-time - Shammerismで、少しだけ時刻の扱いをやった。今回は、ファイルのタイムスタンプの扱いにこれを応用する。
file-write-date という関数があり、これを使用することでファイルのタイムスタンプを取得できる。API のサイトはCLHS: Function FILE-WRITE-DATEだ。
具体的にどんなものなのかはCLHS: Glossary-Section Pに説明がある。引数には、pathname designator の値を取り、戻り値は date となっている。date というだけではよくわからないが、見た目は整数だ。この整数を decode-universal-time に渡すことで見慣れた表記にできる。
? (decode-universal-time 234) 54 3 9 1 1 1900 0 NIL -9 ?
この状態では使用しにくいので、
- ファイル名を引数に取る
- ファイルのタイムスタンプを文字列として返す
関数を考えてみた。桁数を揃える段階が残っているが、基本的には以下のような感じ。
(defun get-decoded-file-timestamp-as-string (file) (multiple-value-bind (second minute hour date month year day-of-week dst-p time-zone) (decode-universal-time (file-write-date file)) (concatenate 'string "[" (write-to-string year) "/" (write-to-string month) "/" (write-to-string date) "]" "[" (write-to-string hour) ":" (write-to-string minute) ":" (write-to-string second) "]")))