web-dev-qa-db-ja.com

DateTime.Nowを有効なWindowsファイル名に変換します

私はこの問題を何度か経験し、回避策を使用しましたが、より簡単なオプションがある場合はここで尋ねると思いました。 DateTime.Nowの文字列があり、これをファイル名に使用する場合、Windowsではファイル名に/および:の文字を使用できないため、次のように置き換える必要があります。

string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');

これは少し面倒なようですが、これを行う簡単な方法はありますか?提案は大歓迎です。

40
Bali C
 DateTime.Now.ToString("dd_MM_yyyy")
57
Royi Namir

サミッチによって書かれたように、しかし

_// The following will produce 2011-10-24-13-10
DateTime.Now.ToString("yyyy-MM-dd-HH-mm", CultureInfo.InvariantCulture);
_

私を信用していない場合は、カルチャをnew CultureInfo("ar-sa");に設定してみてください:-)

あなたが世界を嫌うなら、これが最も正確なことだと付け加えます:

_DateTime.Now.Ticks.ToString("D19");
_

_DateTime.MaxValue.Ticks_には19桁があります

あなたが世界をさらに嫌う場合:

_DateTime.Now.Ticks.ToString("X16");
_

_DateTime.MaxValue.Ticks_には16桁の16進数があります。

48
xanatos

ToStringパターンを使用します。

DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
10
Samich

タイムスタンプの長い形式を使用できます。

DateTime.Now.ToBinary()
2
BigMike

日時をより正確にする必要がある場合は、次を使用できます。

DateTime.Now.ToString("O").Replace(":", "_") //2016-09-21T13_14_01.3624587+02_00

または(必要なものが少し少ない場合)

DateTime.Now.ToString("s").Replace(":", "_") //2016-09-21T13_16_11

どちらも有効なファイル名であり、ソート可能です。

拡張メソッドを作成できます:

public static string ToFileName(this DateTime @this)
{
    return @this.ToString("O").Replace(":", "_");
}

そして、次のように使用します:

var saveZipToFile = "output_" + DateTime.Now.ToFileName() + ".Zip";

「s」形式はタイムゾーンを考慮しないため、日付時刻は考慮されません。

  • 2014-11-15T18:32:17 + 00:00
  • 2014-11-15T18:32:17 + 08:00

「s」を使用してフォーマットされたものは同一です。

したがって、日付時刻が直接のタイムゾーンを表している場合は、「O」またはDateTime.UtcNow

2
inwenis