[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10.1.6 タイムスタンプのフォーマット

デフォルトでは、ファイルのタイムスタンプは短縮形式で表示される。 すなわち、最近のタイムスタンプ以外は、‘Mar 30  2002’ といった日付表示になり、最近のタイムスタンプは、‘Mar 30 23:45’ といった年度なしの日付と時刻の表示になる。この書式は、後で詳しく述べるように、 使用しているロケールによっては違ったものになるかもしれない。

タイムスタンプは、ここ 6 ヶ月以内のもので、未来の日付が付いていなければ、 最近 (recent) として扱われる。今日の日付のタイムスタンプが、 最近用の書式で表示されない場合、そのタイムスタンプは未来扱いされている。 それは、おそらく時計に狂いが生じているということであり、make のような、ファイルのタイムスタンプに頼っているプログラムは、まともに動かないかもしれない。

タイムスタンプは、タイムゾーンのルールに従って表示されるが、 そのルールを指定しているのは、環境変数 TZ である。 TZ が設定されていない場合は、システムのデフォルトのルールに従って表示される。 See (libc)TZ Variable section ‘Specifying the Time Zone with TZ’ in The GNU C Library Reference Manual.

以下のオプションは、ファイルのタイムスタンプの表示方法を変更する。

--time-style=style

タイムスタンプを style 形式で表示する。 style は以下の一つでなければならない。

+format

format を使って、タイムスタンプを表示する。 その場合、format は、date コマンドの書式引数と同じように解釈される (see section date: システムの日付や時刻を表示、設定する)。 たとえば、‘--time-style="+%Y-%m-%d %H:%M:%S"’ と指定すると、 ls の表示するタイムスタンプは、‘2002-03-30 23:45:56’ のようになる。date の場合と同様、format の解釈は、LC_TIME ロケール・カテゴリの影響を受ける。

format に改行で分離された二つの書式文字列がある場合、 前半は最近のファイル以外に使用され、後半は最近のファイルに使用される。 出力される列をきちんと揃えたければ、二つの書式のどちらかに、 空白をいくつか入れる必要があるかもしれない。

full-iso

タイムスタンプを省略なしで表示する。 すなわち、ISO 8601 の日付、時刻、タイムゾーンという構成要素を nanosecond (10 億分の 1 秒) の精度で使用するわけだ。 一例を挙げると、‘2002-03-30 23:45:56.477817180 -0700’ といった表示になる。この形式は、‘+%Y-%m-%d %H:%M:%S.%N %z’ と同じである。

これが有用なのは、タイムスタンプが、オペレーティング・システムから取得できる時間関係のすべての情報を含んでいるからである。 たとえば、GNU の make は、あるファイルが古いかどうかを判定するのに、 省略なしのタイムスタンプを使用している。そのため、この情報が、make の動作を説明するために役立つことがあるのである。

long-iso

ISO 8601 の日付と時刻の構成要素を分の単位まで表示する。たとえば、 ‘2002-03-30 23:45’。このタイムスタンプは、‘full-iso’ タイム スタンプより短く、日常作業にはたいてい十分である。この形式は ‘+%Y-%m-%d %H:%M’ と同じである。

iso

最近以外のタイムスタンプでは、ISO 8601 の日付を表示し (たとえば ‘2002-03-30 ’)、最近のタイムスタンプでは、 ISO 8601 風の月・日・時・分を表示する (たとえば ‘03-30 23:45’)。 この形式は、‘long-iso’ の形式に比べて見かけがよくないが、 より狭いスペースでほぼ同量の情報を伝えており、また、簡潔なので ls の出力を伝統的な 1 行 80 桁の出力行に納めるのに都合がよい。 ls を実行する以下の二つの方法は、同じことである。

 
newline='
'
ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
ls -l --time-style="iso"
locale

タイムスタンプをロケール依存形式で表示する。たとえば、 フィンランド語のロケールだと、最近以外のタイムスタンプを ‘maalis 30  2002’ のように表示し、最近のタイムスタンプは ‘maalis 30 23:45’ のように表示するかもしれない。 ロケール依存のタイムスタンプは、概して ‘iso’ のタイムスタンプより長くなるし、 ロケールごとの規則の違いは非常に大きいので、プログラムによる解析がずっと難しくなる。 だが、こちらの方がわかりやすい人も大勢いる。

タイムスタンプの書式を決めているのは、LC_TIME ロケール・カテゴリである。 デフォルトの POSIX ロケールでは、‘Mar 30  2002’ や ‘Mar 30 23:45’ といったタイムスタンプを使っている。 POSIX ロケールでは、ls を実行する次の二つの方法は、同じことである。

 
newline='
'
ls -l --time-style="+%b %e  %Y$newline%b %e %H:%M"
ls -l --time-style="locale"

しかし、他のロケールでは動作が違う。たとえば、ドイツ語のロケールだと、 ‘--time-style="locale"’ は ‘--time-style="+%e. %b %Y $newline%e. %b %H:%M"’ とおそらく同じになり、‘30. Mär 2002 ’ や ‘30. Mär 23:45’ といったタイムスタンプを生成するだろう。

posix-style

LC_TIME ロケール・カテゴリが POSIX なら、POSIX ロケールのタイムスタンプを表示し、 それ以外なら、style 形式のタイムスタンプを表示する。 たとえば、‘posix-long-iso’ という指定は、POSIX ロケールでは ‘Mar 30  2002’ や ‘Mar 30 23:45’ といったタイムスタンプを表示し、 それ以外のロケールでは ‘2002-03-30 23:45’ といったタイムスタンプを表示する。

--time-style’ オプションのデフォルト値は、環境変数 TIME_STYLE を使って指定することができる。TIME_STYLE が設定されていない場合、 デフォルトの形式は ‘locale’ である。GNU Emacs のバージョン 21.3 以降では、ls の ‘--dired’ オプションを使用しており、 従って、どんな日付のフォーマットでも解析することができる。しかし、Emacs 21.1 や 21.2 を使っていて、POSIX 以外のロケールを指定している場合は、 ‘TIME_STYLE="posix-long-iso"’ を設定する必要があるかもしれない。

ある種のサービス不能化攻撃 (denial-of-service attacks) を回避するため、 1000 バイトより長くなりそうなタイムスタンプは、エラーとして処理されることがある。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.