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""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"以防止猜测和错误.
Ric*_*dle 45
我用这个:
My-File--2009-12-31--23-59-59.txt
Run Code Online (Sandbox Code Playgroud)
--UTC".You*_*You 14
我会使用YYYY-MM-DD HHmmss文件名,除非特别需要时区或可能需要将它们解析为ISO日期; 在这些情况下,ISO日期可能是优选的.
编辑:时区不应该被要求; 以UTC格式保存所有内容,并让人们知道所有UTC都比指定所有内容的时区更有效.
这是我使用的:
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