ファイル名の好きな日付と時刻の形式は何ですか?[閉まっている]


88

これはやや主観的な質問であり、大きな計画ではそれほど重要ではありませんが、それでも定期的に私を悩ませています。ファイル名にタイムスタンプを入れる自明の方法はないようです

客観的な問題は、ファイル名のタイムスタンプをソート可能にする必要があることです。ただし、「s」"yyyy-MM-ddTHH:mm:ss")や「u」"yyyy-MM-dd HH:mm:ssZ")などの.NETの並べ替え可能な日付形式は、「:」文字のため、ファイル名では無効です。

もう1は、ユニバーサルタイムローカルタイムのどちらが使用されているかを簡単に確認できることです。実際には、ユーザーは世界時よりも現地時間を好むようです。

私はほとんどの場合、基本的な時間形式でISO8601を使用することになりました。

  • 現地時間のフォーマット文字列 "yyyy-MM-ddTHHmmsszz"
  • UTC形式の文字列 "yyyy-MM-ddTHHmmssZ"

これらの形式では、現在の現地時間は"2009-08-08T151800+03"UTCになります"2009-08-08T121800Z"

DateTime.Kindを「K」で自動検出してを使用することも"yyyy-MM-ddTHHmmssK"できますが、その場合は「:」文字を置き換える必要があります。

他に何か提案はありますか?

編集:これまでのいくつかのメモ:

"yyyy-MM-ddTHHmmsszz"複数のタイムゾーンが関係している場合、現地時間+タイムゾーン形式はソートできなくなりました。ほとんどの場合、タイムゾーン情報が冗長である場合は削除し、それ以外の場合はUTCを使用するのが理にかなっています。

もう1つのことは、推測や間違いを防ぐために、UTCには常に「Z」、「GMT」、または「UTC」のマークを付ける必要があるということです。

ユリウス暦やその他のスターデートは、グレゴリオ暦を使用した日付の計算が脳死しているため、かっこいいです。


2
私は、物事の大きな計画においてそれが重要であると思うことを除いて、これらすべてに同意します。あなたのフォーマットは最高です-私はISO8601で指定されているように4桁のタイムゾーンを使用して非整数ゾーンに対応します。ISO8601がファイル名の禁止されたコロンに対応していないことはいつも私を悩ませてきました。
hpekristiansen 2016年

私は、ポストにISO 8601に基づいて形式を提案blog.xam.de/2016/07/...を私たちは形式:-)に同意することができればより簡単私たちの世界になるだろう-
博士マックスVölkel

「建設的ではないとして閉鎖」?? すべての提案に賛否両論があるので、建設的です。D:ファイルの命名の細かい哲学的な内容についての質問から敬遠する必要はありません
tanius

回答:


57

私はこれを使用します:

My-File--2009-12-31--23-59-59.txt
  • 場所がない
  • ピースを分離するための二重ダッシュにより、各ピースが見やすくなります
  • 入力しやすい句読文字(ダッシュ)が1つだけ
  • 私にとっては常にローカルタイムゾーンで作業しているため、タイムゾーンはありません。必要な場合は、UTCを使用--UTCして、時間の後に「」を追加します。

5
私はが、私は、ほぼ同じことをし始めることが1だけでアルファベット順にファイル名を注文することにより、時系列順にファイルを表示することができますので、タイムスタンプとし、「私の-ファイル」のもので。
ChristopheD

2
@ChristopheD:もちろんです-その場合も同じことをします。私の答えとして、いくつかの異なるファイルのいくつかのバージョンがあり、それらをファイル名でグループ化する場合を考えていました。
RichieHindle 2009

2
個人的に_は、二重ダッシュの代わりにアンダースコア()を使用して部分を区切ることを好みます。(例My-File_2009-12-31_23-59-59.txt
ElieG.18年

Aname_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.extはLinuxシェルで問題ありません。タイムゾーンはありませんが、ナノ秒の精度です。
イワン・ブラック

14

YYYY-MM-DD HHmmssタイムゾーンが特に必要な場合、またはタイムゾーンをISO日付に解析する必要がある場合を除いて、ファイル名に使用します。そのような場合、ISO日付がおそらく好ましいでしょう。

編集:タイムゾーンは実際には必要ありません。すべてをUTCで保存し、すべてUTCであることを人々に知らせる方が、すべてのタイムゾーンを指定するよりも効率的です。


9
痛い、ファイル名にスペースがありますか?
Saggi Malachi

10
スペースの何が問題になっていますか?
ジョーイ

41
はい、スペースは凶悪です。私は個人的にファイル名にスペースを使用している人々を追跡し、セロリの濡れた棒でそれらを殴り
殺します

1
@Saggi; まあ、私はおそらくそれに値するでしょうが、真剣に-スペースを含むファイル名を処理しない1つのシステムを見せてください?収集できたものから、URIは含まれていなかったので、スペースについてはあまり心配していません。もちろん、そのスペースをアンダースコアやなどの他のスペースと交換することもできますが、それTを読むと自然ではありません。
あなたは

1
私はこれに投票します(ただし、スペースは使用しません)。理由は、y2k1の問題を先延ばしにする4桁の年です(ただし、y10kの問題ではありませんが、誰が本当にXXXXを提供しますか?)。
paxdiablo 2009

8

これが私が使用するものです:

    private static string CreateMeaningfulFileName(string friendlyName, DateTime date)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string s in friendlyName.Split(new char[] { ' ' }))//remove spaces
        {
            sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()));//capitalize each segment
        }
        sb.Append("_" + date.ToString("yyyy-MM-dd_HH-mm"));//add date
        return sb.ToString();
    }

日付と説明が必要です。「私は犬が好き」を使いましょう。結果:

ILikeDogs_1999-09-23_18-42


1
日付と時刻を分割するための優れた方法であり、@ RichieHindleの回答より1文字少なくなります。
Robino 2014年

3

タイムスタンプが人間が読める形式である必要がありますか?そうでない場合は、DateTime.Ticks.ToString()を使用できます。非常に正確で、並べ替え可能で、特殊文字はありません。


1
可能であれば、私はすべてを人間が読める形式にしようとする傾向があります。これは、JSON表記のようなスキームの大きな価値の1つです。人間が読める形式である必要はないと思っていても、後で人間が読める形式にする必要があるかどうかはわかりません。また、デバッグが容易になる傾向があります。
Edan Maor 2010年

リンクがダウンしています、何に行きますか?
rbatt 2015

@rbattこれはMSDNの一時的な問題だったと思いますが、今すぐ戻ってくるはずです。
ダンディプロ2015


1

私はunixタイムスタンプを使用します。エポックから何秒経過したか。常にUTCで。ただし、必要に応じて、タイムゾーンデータのプレフィックスを付けることができると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.