Shammer's Philosophy

My private adversaria

ファイルのタイムスタンプを取得【その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) "]")))