わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

nowコマンドを修正する

実は昨日irbでいろいろ実行させながら,Time#iso8601に与える引数を思案したのですが,うまくいかず,nowに取り入れられませんでした.
Sixeightさんのコメントをもとに再調査して,解決しました.
昨日リンクしていた

Time#xmlschema([fractional_seconds])
Time#iso8601([fractional_seconds])
(略)
fractional_secondsは小数点以下の秒を指定します。 fractional_secondsのデフォルト値は0です。

http://www.ruby-lang.org/ja/man/html/time.html

では何か分からず,「t=Time.now; puts t.iso8601(t.usec)」とか「t.iso8601(t.usec/1e6)」とか試したものの,期待する結果が出なかったのですが,

(略)
[PARAM] fractional_seconds:
小数点以下の秒の桁数を整数で指定します。省略した場合は0となります。

http://doc.loveruby.net/refm/api/view/method/Time/i/iso8601

とあって,使用例も書かれていました.「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

*1:なぜかFirefoxでダウンロードしたファイルは表示ができず,Cygwinwgetコマンドで取得し直しました.