web-dev-qa-db-ja.com

明確なタイムスタンプを表示するにはどうすればよいですか?

問題:ファイル名が人間にとって明確な方法でログファイルに名前を付ける必要があります。


私の最初の解決策は、各ユニットのゼロパディングで最大ユニットから最小ユニットに移行することでした...

YYYYMMDDhhmmssuuuu.log

  • Y-4桁の年(2019-)
  • M-2桁の月(01〜12)
  • D-2桁の日(01-31)
  • h-2桁の時間(00-23)
  • m-2桁の分(00-59)
  • s-2桁の秒(00-59)
  • u-4桁のミリ秒(0000〜9999)

ログファイルは常に正しい順序で並べ替える必要があります(ファイル番号が大きいほど時間がかかります)。

201912051357040042.log

名前をもっと人間が読めるようにするために、いくつかの文字を追加することにしました...

2019-12-05_13-57-04-0042.log

ログが書き込まれた実際の時間は、上記のルールを使用して抽出できます...

2019-12-05 13:57:04.0042

ただし、あいまいさは、時計の時針が1日2回13-01と言うことができるため、時間が12未満の場合に発生します。

たとえば、次のファイル名は...

2020-02-14_12-30-11-8675.log

同様に"バレンタインデーのスーパーアーリー"または"バレンタインデーの昼食時"

ログファイルに名前を付ける方法はありますか?そのため、間違ったタイムスタンプを想定することはできませんか?

(ファイル名は短いほど良いですが、ファイル名の長さに制限はないと想定できます)

私が考えることができるのはこれだけですが、おそらく他の誰かがより簡潔な解決策を持っています...

2020Y02M14D_12of23H30of59M11of59S8675of9999MS.log

1
DaveAlger

日付と時刻の値を組み合わせたISO形式 を使用します。

日付を扱うときは、標準特にを守ることが最善です。

上記のリンクされたウィキペディアの記事は次のように述べています(私の強調):

単一の時点は完全な日付式、区切り文字としての文字「T」、および有効な時間式を連結することによって表されますになります。たとえば、「2007-04-05T14:30」です。 「200704051430」のように相互の合意により、「T」の文字を省略してもかまいません。日付と時刻の部分をスペースなどの他の文字で区切ることは、ISO 8601では許可されていませんが、そのプロファイルRFC 3339では許可されています。

" valid time expression "は、常に24時間形式で記述され、あいまいさに関する懸念に対処しています。


したがって、おそらく次の形式で何かを使用するのが最善です。

2019-12-05T16:17:23.015.log (もっと読みやすい)

@ dosxukで述べたように 、WindowsとMacの両方で、ファイル名に:文字を使用すると問題が発生します。これらがファイルの名前である場合、以下の圧縮形式を使用することをお勧めします。

または

20191205161723015.log (より凝縮)

これらのフォームには、英数字のソートも時系列であるという追加の利点もあります。

8
maxathousand

これは機械ではなく人間の読者にとって明確なものだと思いますか?

ISO 8601は、機械で読み取り可能/解析可能なデータに適した提案ですが、人間が読みやすいようにするためには注意が必要です。例えば。米国では月と日が入れ替わった日付を使用しているので、あなたの例では、12月5日または5月12日を意味しますか?これは、過去に何度か私に気づかれました。ログファイル名を出力する人/プログラムはiso8601形式を知っているかもしれませんが、すべてのユーザーが行うロングショットです...

私はいくつかのガイドラインからヒントを得ます。材料設計- https://material.io/design/communication/data-formats.html#date-time -あいまいさを取り除くには月を表示し、時間のあいまいさを取り除くにはam/pmステータスを表示します

5th_Dec_2019_12-30-11.0042-PM(完璧ではありません。ミリ秒の前のドットはファイル名には適していませんが、これは推奨事項であり、タイムゾーンも必要かどうかを検討してください)

もちろん、これはファイル名で時系列に並べ替える機能を失います。ここでの解決策は、ログで生成されたファイル情報に基づいてそれらを並べ替えるか、ミリ秒精度のUNIXなど、ファイル名の前にある機械で読み取り可能な数値を強打することです。タイムスタンプ。ここでは時系列で並べ替えることができ、ファイル名の最後の部分は人間が読める形式であり、明確です。

15755490110042__5th_Dec_2019_12-30-11.0042-PM
2
mgraham

私はISOに傾く傾向がありますが、ファイル名の制限、並べ替えの利点はありますが、それでも比較的人にやさしいので、実際には次のようなものに傾けます。

2020y01m14d_12h30m11s_8765ms-23hrs-UTC.log
2020y01m15d_12h31m11s_7654ms-23hrs-UTC.log
2020y01m16d_12h27m11s_9867ms-23hrs-UTC.log
2020y01m17d_12h41m11s_5432ms-23hrs-UTC.log
2020y01m18d_12h12m11s_6543ms-23hrs-UTC.log

小文字を使用すると、(a)人間の消費者の文字/数字のあいまいさが減少し、(b)セクションの視覚的な手掛かりが少し改善されますが、コンピュータの正確なソート機能が損なわれることはありません。

アンダースコアは、人間の消費者が一緒に消費される傾向がある個別の情報セットを支援するためのものでもあります。

仮定:

  • すべての値は一貫して表示される幅を持っています(たとえば、毎月の値は2文字を使用します)
  • [〜#〜] all [〜#〜]エントリは23時間の値になります(それ以外の場合、一般的なファイルの並べ替えは、何時間も一貫して機能しません)。 23hrs最後にあるのは、問題についてのあいまいさを取り除くことです。
  • 同様に[〜#〜] all [〜#〜]エントリはUTCになります(繰り返しになりますが、通常のファイルソートは異なる時間帯では機能しませんゾーン)。最後のUTCも、問題に関する曖昧さを取り除くためのものです。
1
MetaSean

私は次のようにすべてのデータを2桁で表すことを好みます。

20Y02M14D12H30M11S86SS75MS.log

しかし、年とミリ秒を4桁で保持する必要がある場合は、次のものを使用できます。

2020Y02M14D12H30M11S8675MS.log

1
Erhan Yaşar