将DateTime.Now转换为有效的Windows文件名

Bal*_*i C 40 c# windows filenames

我已经有这个问题很多次了,并且刚刚使用了一种解决方法,但我想在这里可以提出一个更容易的选择.当我有一个字符串,DateTime.Now然后我想在文件名中使用它我不能,因为Windows不允许字符/和:在文件名中,我必须去替换它们,如下所示:

string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');
Run Code Online (Sandbox Code Playgroud)

这似乎有点麻烦,有更简单的方法吗?任何建议非常感谢.

Roy*_*mir 57

 DateTime.Now.ToString("dd_MM_yyyy")
Run Code Online (Sandbox Code Playgroud)

  • 请注意从首都MM这个月而不是mm这是分钟..非常重要! (6认同)

xan*_*tos 48

正如Samich所写,但是

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

如果您不信任我,请尝试将文化设置为new CultureInfo("ar-sa");:-)

我要补充一点,如果你讨厌世界,这是最精确的事情:

DateTime.Now.Ticks.ToString("D19");
Run Code Online (Sandbox Code Playgroud)

有19位数字 DateTime.MaxValue.Ticks

如果你更恨世界:

DateTime.Now.Ticks.ToString("X16");
Run Code Online (Sandbox Code Playgroud)

有16个十六进制数字DateTime.MaxValue.Ticks.

  • @BaliC我要补充一点,如果你正处于使用`DateTime`对你的文件进行编号的"运动",你应该使用`DateTime.UtcNow`,这样你就不会有DST更改时间的问题. (3认同)

Sam*_*ich 10

使用ToString模式:

DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
Run Code Online (Sandbox Code Playgroud)

  • 你将不得不使用HH而不是hh或者代替14来获得02 (2认同)