実は昨日,irbでいろいろ実行させながら,Time#iso8601に与える引数を思案したのですが,うまくいかず,nowに取り入れられませんでした.
Sixeightさんのコメントをもとに再調査して,解決しました.
昨日リンクしていた
Time#xmlschema([fractional_seconds])
http://www.ruby-lang.org/ja/man/html/time.html
Time#iso8601([fractional_seconds])
(略)
fractional_secondsは小数点以下の秒を指定します。 fractional_secondsのデフォルト値は0です。
では何か分からず,「t=Time.now; puts t.iso8601(t.usec)」とか「t.iso8601(t.usec/1e6)」とか試したものの,期待する結果が出なかったのですが,
(略)
http://doc.loveruby.net/refm/api/view/method/Time/i/iso8601
[PARAM] fractional_seconds:
小数点以下の秒の桁数を整数で指定します。省略した場合は0となります。
とあって,使用例も書かれていました.「t.iso8601(3)」のように書けばよかったのでした!
もう少し調査.いつもWebアクセスできるとは限らないので,chmファイルの最新版がほしいのですが,これもコメントいただいた中の http://doc.okkez.net/ へ飛び,archivesと200812を経由して http://doc.okkez.net/archives/200812/ruby-refm-1.8.7-20081229.chm をダウンロードして*1,開くと,「instance method Time#iso8601」の中に同じ記述と使用例が書かれていました.手元のそれまでのchmファイルはその情報がなく,今ダウンロードしたものに置き換えました.
zshでの定義を変更してしまいましょう.
function now() { case ${1:-_} in -h*|--h*) # now --help echo usage: now '[date|httpdate|rfc2822|iso8601]' ;; d*) # now date LC_ALL=C date ;; h*) # now httpdate ruby -e 'require "time"; puts Time.now.httpdate' ;; i*|x*) # now iso8601, now xmlschema ruby -e 'require "time"; puts Time.now.iso8601'\(${2:-0}\) ;; r*) # now rfc2822, now rfc822 ruby -e 'require "time"; puts Time.now.rfc2822' ;; *) # now ruby -e 'require "time"; puts Time.now' ;; esac }
動作確認.
$ now Fri Jan 16 04:53:12 +0900 2009 $ now d Fri Jan 16 04:53:14 JST 2009 $ now h Thu, 15 Jan 2009 19:53:17 GMT $ now i 2009-01-16T04:53:19+09:00 $ now i 3 2009-01-16T04:53:21.398+09:00 $ now i 6 2009-01-16T04:53:23.608368+09:00 $ now r Fri, 16 Jan 2009 04:53:26 +0900