将DateTime.Now转换为有效的Windows文件名
我已经有过这个问题了好几次了,刚刚使用了一种解决方法,但是我想在这里问一个更简单的选项。 当我有一个从DateTime.Now
string,然后我想要在一个文件名中使用这个我不能因为Windows不允许的字符/和:在文件名,我必须去取代他们这样的:
string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');
这似乎有点麻烦,有没有更简单的方法来做到这一点? 任何build议非常感谢。
DateTime.Now.ToString("dd_MM_yyyy")
正如Samich所写,但是
// 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
有十六个hex数字。
使用stirng模式:
DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
您可以使用时间戳的长格式:
DateTime.Now.ToBinary()
如果你需要更精确的date时间,你可以使用:
DateTime.Now.ToString("O").Replace(":", "_") //2016-09-21T13_14_01.3624587+02_00
或者(如果你需要less一些)
DateTime.Now.ToString("s").Replace(":", "_") //2016-09-21T13_16_11
两者都是有效的文件名称,可sorting。
你可以创build一个扩展方法:
public static string ToFileName(this DateTime @this) { return @this.ToString("O").Replace(":", "_"); }
然后像这样使用它:
var saveZipToFile = "output_" + DateTime.Now.ToFileName() + ".zip";
“s”格式不考虑时区,因此date时间:
- 2014-11-15T18:32:17 + 00:00
- 2014-11-15T18:32:17 + 08:00
使用“s”格式化是相同的。
所以如果你的date时间代表不同的时区,我会build议使用“O”或使用DateTime.UtcNow
。
- “O”格式符合ISO 8601,如下所述
- 这里描述了 “s”格式