Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-02-05

KMRCLを眺める (80) WRITE-UTIME-YMDHMS-STREAM

| 23:36 | KMRCLを眺める (80) WRITE-UTIME-YMDHMS-STREAM - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (80) WRITE-UTIME-YMDHMS-STREAM - わだばLisperになる

今回はKMRCLのio.lisp中からWRITE-UTIME-YMDHM-STREAMです。

動作は

(WITH-OUTPUT-TO-STRING (OUT)
  (WRITE-UTIME-YMDHM-STREAM (GET-UNIVERSAL-TIME) OUT))
;⇒ "2010/02/05 23:15:37"

というところです。割と良く使う形式かもしれません。

定義は、

(defun write-utime-ymdhms-stream (utime stream &optional utc-offset)
  (with-utime-decoding-utc-offset (utime utc-offset)
    (write-string (prefixed-fixnum-string year nil 4) stream)
    (write-char #\/ stream)
    (write-string (aref +datetime-number-strings+ month) stream)
    (write-char #\/ stream)
    (write-string (aref +datetime-number-strings+ day-of-month) stream)
    (write-char #\space stream)
    (write-string (aref +datetime-number-strings+ hour) stream)
    (write-char #\: stream)
    (write-string (aref +datetime-number-strings+ minute) stream)
    (write-char #\: stream)
    (write-string (aref +datetime-number-strings+ second) stream)))

となっていますが、この定義の中のPREFIXED-FIXNUM-STRINGは、string.lispで定義されていて、ここでは、0でパディングされた数字を出力するのに利用しているようです。

(PREFIXED-FIXNUM-STRING 77 NIL 8)
;⇒ "00000077"

どうもKMRCL(というかKMR氏)は、FORMATでがんばったりはあまりしないスタイルなのかなと思えてきました。

そういうスタイルもありですね。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20100205