日付の表現

作成日:2002-11-22
最終更新日:

1. Windows での日付の表現と変更

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 を忘れると、とんでもない時刻が表示されるので注意すること。

2. UNIX での日付の表現と変更

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 > 日付の表現


MARUYAMA Satosi