私はこの問題を何度か経験し、回避策を使用しましたが、より簡単なオプションがある場合はここで尋ねると思いました。 DateTime.Now
の文字列があり、これをファイル名に使用する場合、Windowsではファイル名に/および:の文字を使用できないため、次のように置き換える必要があります。
string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');
これは少し面倒なようですが、これを行う簡単な方法はありますか?提案は大歓迎です。
DateTime.Now.ToString("dd_MM_yyyy")
サミッチによって書かれたように、しかし
_// 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進数があります。
ToStringパターンを使用します。
DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
タイムスタンプの長い形式を使用できます。
DateTime.Now.ToBinary()
日時をより正確にする必要がある場合は、次を使用できます。
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」形式はタイムゾーンを考慮しないため、日付時刻は考慮されません。
「s」を使用してフォーマットされたものは同一です。
したがって、日付時刻が直接のタイムゾーンを表している場合は、「O」またはDateTime.UtcNow
。