【问题标题】:Convert DateTime.Now to a valid Windows filename将 DateTime.Now 转换为有效的 Windows 文件名
【发布时间】:2011-12-14 00:26:14
【问题描述】:

我已经多次遇到这个问题,并且一直在使用一种解决方法,但我想我会在这里问一下,以防有更简单的选择。当我有来自DateTime.Now 的字符串,然后我想在文件名中使用它时,我不能,因为 Windows 不允许在文件名中使用字符 / 和 :,我必须像这样替换它们:

string filename = DateTime.Now.ToString().Replace('/', '_').Replace(':', '_');

这似乎有点麻烦,有没有更简单的方法可以做到这一点?任何建议都非常感谢。

【问题讨论】:

  • 你能使用像yyyyMMdd这样更符合逻辑的iso8601风格的模式吗?

标签: c# windows filenames


【解决方案1】:

使用 ToString 模式:

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

【讨论】:

  • 你必须使用 HH 而不是 hh 或者你会得到 02 而不是 14
【解决方案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”格式不考虑时区,因此不考虑日期时间:

  • 2014-11-15T18:32:17+00:00
  • 2014-11-15T18:32:17+08:00

用“s”格式化的都是一样的。

因此,如果您的日期时间代表不同的时区,我建议使用“O”或使用DateTime.UtcNow

【讨论】:

    【解决方案3】:

    正如 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 中有 16 个十六进制数字。

    【讨论】:

    • 哇,我不知道 DateTime 有这么多细节,+1,谢谢!
    • @BaliC 我要补充一点,如果您喜欢使用DateTime 为文件编号,您应该使用DateTime.UtcNow,这样您就不会在夏令时遇到问题改变时间。
    【解决方案4】:

    您可以使用时间戳的长格式:

    DateTime.Now.ToBinary()
    

    【讨论】:

      【解决方案5】:
       DateTime.Now.ToString("dd_MM_yyyy")
      

      【讨论】:

      • 注意大写 MM 是月份而不是 mm 是分钟 .. 非常重要!
      • 这假定语言不使用 dd、MM 或 yyyy 格式的非法文件名字符。真的适合英语。其他语言不一定如此。
      • @RoyiNamir 谢谢,我刚刚尝试使用它并遇到了这个问题,所以回来看看你的答案,谢谢!
      猜你喜欢
      • 2011-05-05
      • 2011-05-24
      • 2011-08-12
      • 2013-03-25
      • 2011-09-04
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2015-04-16
      相关资源
      最近更新 更多