我已经有过这个问题很多次了,并且刚刚使用了一种解决方法,但我想在这里可以提出更简单的选择。当我有来自DateTime.Now
的字符串然后我想在文件名中使用它时我不能,因为Windows不允许字符/和:在文件名中,我必须像这样替换它们:< / p>
string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');
这看起来有点麻烦,有更简单的方法吗?任何建议都非常赞赏。
答案 0 :(得分:55)
DateTime.Now.ToString("dd_MM_yyyy")
答案 1 :(得分:47)
由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
如果你更恨世界:
DateTime.Now.Ticks.ToString("X16");
DateTime.MaxValue.Ticks
中有16个十六进制数字。
答案 2 :(得分:10)
使用ToString模式:
DateTime.Now.ToString("yyyy-MM-dd-HH-mm") // will produce 2011-10-24-13-10
答案 3 :(得分:2)
您可以使用时间戳的长格式:
DateTime.Now.ToBinary()
答案 4 :(得分:2)
如果您需要更准确的日期时间,您可以使用:
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”格式不考虑时区,因此考虑日期时间:
是相同的。
因此,如果您的日期时间代表不同的时区,我建议您使用“O”或使用DateTime.UtcNow
。