文件名中您最喜欢的日期和时间格式是什么?

mik*_*ika 76 .net filenames datetime

这是一个有点主观的问题,并不是很重要的事情,但有些事情却让我经常烦恼.似乎没有不言而喻的方法将时间戳放在文件名中.

客观问题是文件名中的时间戳应该是可排序的.但是,由于":"字符,"s"("yyyy-MM-ddTHH:mm:ss")和"u"("yyyy-MM-dd HH:mm:ssZ")等.NET可排序日期格式在文件名中无效.

另一件事是你应该很容易看到是否使用了通用或本地时间.实际上,用户似乎更喜欢当地时间和普及时间.

我最终使用的是基本时间格式的ISO 8601:

  • 本地时间格式字符串 "yyyy-MM-ddTHHmmsszz"
  • UTC格式字符串 "yyyy-MM-ddTHHmmssZ"

在这些格式中,我当前的当地时间是"2009-08-08T151800+03"和UTC"2009-08-08T121800Z"

您也可以使用"K"自动检测DateTime.Kind 并使用"yyyy-MM-ddTHHmmssK",但是您必须替换':'字符.

还有其他建议吗?

编辑:到目前为止的一些注释:

"yyyy-MM-ddTHHmmsszz"如果涉及多个时区,则本地时间+时区格式不再可排序.在大多数情况下,如果时区信息是冗余的,则删除时区信息是有意义的,否则使用UTC.

另一件事是UTC应始终标有"Z","GMT"或"UTC"以防止猜测和错误.

Julian日期和其他stardate很酷,因为与格里高利历的日期算术是脑死亡.

Ric*_*dle 45

我用这个:

My-File--2009-12-31--23-59-59.txt
Run Code Online (Sandbox Code Playgroud)
  • 空间不足
  • 双击破碎,使每件都易于看到
  • 只有一个标点字符(破折号),便于输入
  • 没有时区,因为对我而言,我总是在当地时区工作; 如果我需要一个,我会使用UTC,然后追加" --UTC".

  • 我做的大致相同,虽然我*用时间戳开始*然后是'my-file'的东西,因为这样可以按字母顺序按文件名顺序查看文件. (4认同)
  • @ChristopheD:当然 - 在那种情况下我也会这样做.对于我的回答,我想到的情况是你有几个版本的几个不同的文件,你希望它们按文件名分组. (2认同)
  • 我个人更喜欢使用下划线(`_`)而不是双破折号来分隔各个部分。(例如`My-File_2009-12-31_23-59-59.txt`) (2认同)

You*_*You 14

我会使用YYYY-MM-DD HHmmss文件名,除非特别需要时区或可能需要将它们解析为ISO日期; 在这些情况下,ISO日期可能是优选的.

编辑:时区不应该被要求; 以UTC格式保存所有内容,并让人们知道所有UTC都比指定所有内容的时区更有效.

  • 是的,空间是令人发指的.我会亲自追踪那些在文件名中使用空格的人,并用一根芹菜湿棒将它们打死:-) (33认同)
  • 空间有什么问题? (9认同)
  • ouch,文件名中的空格? (6认同)
  • @你,这不是文件系统遇到空格问题,而是脚本和设计不良的程序无法正确处理它们。 (4认同)
  • @萨吉; 好吧,我可能应该得到那个,但说真的——给我看看一个不处理带空格的文件名的系统?据我所知,没有涉及 URI,因此我不太担心空格。您当然可以将该空格替换为其他内容,例如下划线或“T”,但在您阅读时这不太自然。 (3认同)

N-a*_*ate 7

这是我使用的:

    private static string CreateMeaningfulFileName(string friendlyName, DateTime date)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string s in friendlyName.Split(new char[] { ' ' }))//remove spaces
        {
            sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()));//capitalize each segment
        }
        sb.Append("_" + date.ToString("yyyy-MM-dd_HH-mm"));//add date
        return sb.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

它需要一个日期和描述.让我们用"我喜欢狗".结果是:

ILikeDogs_1999-09-23_18-42

  • 打破日期和时间的好方法,比 @RichieHindle 的答案少 1 个字符。 (2认同)