web-dev-qa-db-ja.com

タイムスタンプを含むファイル名の推奨フォーマット

「unix」は「/」と「\ 0」以外のファイルに何でも持つことができることは誰もが知っているように、システム管理者は、主に入力としてスペースが好きではないため、はるかに小さい設定になる傾向があります...とりわけ「:」と「@」の特別な意味。

最近、ファイル名にタイムスタンプが使用されているさらに別のケースを見たことがあります。さまざまな形式で遊んで「より良い」ものにした後、「ベストプラクティス」を見つけようとしました。ここで質問して、人々の考えを見てみます。

考えられる「一般的な」ソリューション(p = prefixおよびs = suffix):

  1. syslog/logrotate/DNSのような形式:

    p-%Y%m%d-suffix = prefix-20110719-s
    p-%Y%m%d%H%M-suffix = prefix-201107191732-s
    p-%Y%m%d%H%M%S-suffix = prefix-20110719173216-s
    

    長所:

    • それは「一般的」であるため、「十分」は「最良」よりも優れている可能性があります。
    • 変な文字はありません。
    • 「日付/時刻blob」を他のすべてのものと簡単に区別できます。

    短所:

    • 日付のみのバージョンは読みづらく、時間を含めると目が出血し、秒も同様に「笑」します。
    • TZを想定しています。
  2. ISO-8601-フォーマット

    p-%Y-%m-%d-s = p-2011-07-19-s
    p-%Y-%m-%dT%H:%M%z-s = p-2011-07-19T17:32-0400-s
    p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T17:32:16-0400-s
    p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T23:32:16+0200-s
    

    長所:

    • 場所がない。
    • TZを考慮に入れます。
    • 人間が読むのは「悪くない」(日付のみが良い)。
    • $(date --iso = {hours、minutes、seconds})で生成できます

    短所:

    • scp/tar/etc。これらの「:」文字は好きではありません。
    • 「普通の」人々が「T」が意味するWTFを見るには少し時間がかかります、そして最後に何が:).
    • 多くの「-」文字。
  3. rfc-3339フォーマット

    p-%Y-%m-%d-s = p-2011-07-19-s
    p-%Y-%m-%d %H:%M%:z-s = p-2011-07-19 17:32-04:00-s
    p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 17:32:16-04:00-s
    p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 23:32:16+02:00-s
    

    長所:

    • TZを考慮に入れます。
    • 「すべての人間」が簡単に読める。
    • 日付/時刻と接頭辞/接尾辞を区別できます。
    • 上記の一部は$(date --iso = {hours、seconds})で生成できます

    短所:

    • タイムバージョンにスペースが含まれている(つまり、すべてのコードでスペースが嫌われる)。
    • scp/tar/etc。これらの「:」文字は好きではありません。
  4. ハイフンが大好きです:

    p-%Y-%m-%d-s = p-2011-07-19-s
    p-%Y-%m-%d-%H-%M-s = p-2011-07-19-17-32-s
    p-%Y-%m-%d-%H-%M-%S-s = p-2011-07-19-23-32-16-s
    

    長所:

    • 基本的に少しいいsyslog /など。バリアント。

    短所:

    • 多くの「-」文字。
    • TZを想定しています。
  5. 私は拡張子付きのハイフンが大好きです:

    p.%Y-%m-%d.s = p.2011-07-19.s
    p.%Y-%m-%d.%H-%M.s = p.2011-07-19.17-32.s
    p.%Y-%m-%d.%H-%M-%S.s = p.2011-07-19.23-32-16.s
    

    長所:

    • 基本的には、もう少し良い「ハイフンが大好き」な変形です。
    • 変な文字はありません。
    • 日付/時刻と接頭辞/接尾辞を区別できます。

    短所:

    • 「。」の使用ここはやや非伝統的です。
    • TZを想定しています。

...したがって、誰もが好みと理由、または複数のことを望んでいます(たとえば、マシンがローカルのままでいることが95 +%の場合はTZを気にしませんが、そうでない場合は気にします)。

または、明らかに、上記のリストにないもの。

16
James Antill
  1. ISO 8601形式は、規格に最も近いものであるため、可能な限り準拠する必要があります。
  2. 「T」は、それを取り除くことを本当に保証するのに十分な障害ではありません。
  3. ':'はキラーになる可能性があるため、回避する必要があります。
  4. 他の回答で言及されている理由により、UTC(または「Z」時間)を使用する必要があります。
  5. ISO 8601には、UTC( 'Z'時間)を使用する形式が含まれているため、これを使用する必要があります。
  6. ISO 8601には、「:」文字を使用しない形式が含まれているため、これを使用する必要があります。

だから...「最高の」日付時刻形式のサンプル:

  1. 20120317T1748Z

    • ISO 8601に準拠した100%
    • 英数字のみ(非常にシステム管理者に優しい)
    • 読むのが最も速いわけではありませんが、一般の人は確かに読むことができます
  2. 2012-03-17T1748Z

    • 日付部分はISO 8601に準拠しています
    • 時間部分はISO 8601に準拠しています
    • 日付と時刻間の移行はISO 8601に準拠
    • iSO 8601の「拡張」フォーマット(ハイフン付きの日付、コロン付きの時間)とISO 8601の「基本」フォーマット(ハイフンなしの日付、コロンなしの時間)を混合します。
    • 「-」文字を追加(vs 1.)
    • 一般の人が読むのが少し簡単です(vs 1.)
  3. 2012-03-17--1748Z

    • 日付部分はISO 8601に準拠しています
    • 時間部分はISO 8601に準拠しています
    • 日付と時刻の間の移行がISO 8601に準拠していない
    • iSO 8601「拡張」フォーマットとISO 8601「基本」フォーマットを混合します
    • 一般の人が読むのが少し簡単です(vs 1.と2.)。
    • 新しい文字はありません(vs 2.)

完全にIAWの標準であるため、私は1.に部分的ですが、他の人は近いです。

注:もちろん、必要に応じて秒を追加します。 ...そしてはい、秒の有無にかかわらず(または数分)はすべてIAW ISO 8601です。

20
A.M.

タイムゾーンは含めず、世界時のみを使用します。混乱がある場合は、-UTCサフィックスを追加できます。タイムゾーンを指定すると、誰かがそれに依存する可能性があります。また、一部の処理でDSTの変更やDSTシフトが大混乱を引き起こす、またはDST構成が最新ではないために一部のシステムで処理が異なる、奇妙なEdgeのケースがあります。 UTCはどこでも常に同じです。

ハイフンを使用すると、ファイルデータの日時がわかりやすくなるという意味で、ファイル名が読みやすくなると思います。 1秒未満の精度を含める場合、通常は.nnnnnです。

私は個人的にTが好きではありません。ファイル名にコロンを使用すると、他のファイルシステムとの相互運用性に影響を与える可能性があります。

2
Greg Askew

価値のあるものは何でも、これはスクリーンショットユーティリティ scrot がデフォルトでファイル名に使用する形式です(つまり、ファイル名が指定されていない場合)。

_%Y-%m-%d-%H%M%S_$wx$h_scrot.png
_

_%_を使用する部分は標準の strftime(3) 形式指定子で、_$w_は画像の幅、_$h_は画像の高さです。

例:

_$ scrot
$ find *.png
2020-03-07-152236_1920x1080_scrot.png
_

UTCタイムスタンプの場合:

_$ TZ=UTC scrot
$ find *.png
2020-03-07-152236_1920x1080_scrot.png
2020-03-07-183257_1920x1080_scrot.png
_

:ファイル名にタイムゾーンが指定されていません。ツールの意図する目的(つまり、スクリーンショット)を考慮すると、それが価値をもたらすとは思いません。さらに、上記のフォーマットは、読み取りもそのままの解析もできるほど簡単です。

ソース

_if (!opt.output_file) {
  opt.output_file = gib_estrdup("%Y-%m-%d-%H%M%S_$wx$h_scrot.png");
  opt.thumb_file = gib_estrdup("%Y-%m-%d-%H%M%S_$wx$h_scrot-thumb.png");
} else {
  have_extension = scrot_have_file_extension(opt.output_file);
}
_
0
kelvin