日付の表現 |
作成日:2002-11-22 最終更新日: |
Namazu はファイル更新時間の情報をもっている。 これを使って、更新時間を表示させるだけでなく、 ソーティングのキーにすることができる。 pNamazu では、検索条件にすることもできる。
Namazu での日付の出力は、Windows 環境の場合次のようになる。
日付: Mon, 17 Jul 2000 05:37:03
この表現を任意に変えたいときはどうするか。 Namazu メーリングリストでは、次のページに回答がある。 http://www.namazu.org/ml/namazu-users-ja/msg00702.html
要旨は次の通り。
日付の情報はNMZ.field.date に記録されています。 NMZ.field.dateをお好みの形式に書き換えて、 rfnmz でNMZ.field.date.iを再構築すれば良いと思います。
では実際に、上記の日付を2000-07-17 05:37:03 (疑似ISO 表現)のように変更する。 適当なスクリプト言語で NMZ.field.date を変換する。 ここでは Ruby スクリプトを掲げる 。
# 時間表現
month = {
'Jan' => '01',
'Feb' => '02',
'Mar' => '03',
'Apr' => '04',
'May' => '05',
'Jun' => '06',
'Jul' => '07',
'Aug' => '08',
'Sep' => '09',
'Oct' => '10',
'Nov' => '11',
'Dec' => '12',}
STDOUT.binmode
while line = STDIN.gets
if /^.+, (\d\d) (\w\w\w) (\d\d\d\d) (\d\d:\d\d:\d\d)$/ =~ line
print "#{$3}-#{month[$2]}-#{$1} #{$4}\n"
else
print "#{line}"
end
end
STDOUT.binmode を行うのは、 出力するときに Windows 用の改行文字ではなく、 Namazu で扱う改行文字にするためである。 また、既に ISO 表現になっている日付表現もあるので、 これはそのまま出力させるために print している。 読み込んだ line には改行文字があるため、、 \n を入れる必要はない。
そして、rfnmz コマンドを作用させる (rfnmz は、ReFormat NaMaZu の略と思われる)。 インデックスは、C:\Namaru/foobar にあるとする。
$ rfnmz C:\Namazu/foobar
rfnmz を忘れると、とんでもない時刻が表示されるので注意すること。
UNIX (Linux 含む)で Namazu のインデックスを作ると、 次のように時差を含めて表示される。
Sat, 18 Feb 2006 10:57:34 +0900
これをISO8601表記で扱うには、次のようにする。
require "date"
while line = STDIN.gets
print DateTime.parse(line).to_s, "\n"
end
急に簡単になった。これは DateTime クラスのクラスメソッド parse のおかげだ。 このオブジェクトにto_sメソッドを作用させると、 下記の正式な ISO 8601 書式となる。
2006-02-18T10:57:34+0900
さきほど疑似 ISO 表現と言ったのは、日付と時刻の間の文字 T と 時差を現わす +0900 がなかったことによる。
rfnmz コマンドの実行が必要なことも Windows の場合と同様だ。(2006-05-03)
なお、ISO 8601 表記にした理由は、 既定値では曜日が英語略称になるため、他言語表示に支障を来すためである。 言い換えると、現在の Namazu の仕様では日時表示を言語に合わせて変更することはできない。
まりんきょ学問所 > 全文検索システム Namazu > 日付の表現