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

我已经有过这个问题了好几次了,刚刚使用了一种解决方法,但是我想在这里问一个更简单的选项。 当我有一个从DateTime.Nowstring,然后我想要在一个文件名中使用这个我不能因为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”格式