你最喜欢的文件名中的date和时间格式是什么?
这是一个有点主观的问题,在大事情中不是很重要,但是还是经常让我烦恼。 在文件名中join时间戳似乎没有不言而喻的方法。
客观的问题是文件名中的时间戳应该是可sorting的 。 但.NET可sorting的date格式,如“s” ( "yyyy-MM-ddTHH:mm:ss"
)和“u” ( "yyyy-MM-dd HH:mm:ssZ"
)在文件名中无效, :'字符。
另一件事是,你应该很容易看到是否使用普遍或本地时间 。 实际上,用户似乎更喜欢当地时间到世界各地。
我已经最终使用基本时间格式的ISO 8601 :
- 本地时间格式string
"yyyy-MM-ddTHHmmsszz"
- UTC格式string
"yyyy-MM-ddTHHmmssZ"
在这些格式中,我当前的本地时间将是"2009-08-08T151800+03"
和UTC "2009-08-08T121800Z"
您也可以用“K”自动检测DateTime.Kind并使用"yyyy-MM-ddTHHmmssK"
,但是您必须replace“:”字符。
还有其他build议吗?
编辑:到目前为止的几个笔记:
本地时间+时区格式"yyyy-MM-ddTHHmmsszz"
不能再sorting,如果涉及多个时区的话。 在大多数情况下,如果它是冗余的,则删除时区信息是有意义的,否则使用UTC。
另一件事是,UTC应该总是用'Z','GMT'或'UTC'来标记,以防止猜测和错误。
Juliandate和其他stardates很酷,因为与公历的date算术是braindead。
我使用这个:
My-File--2009-12-31--23-59-59.txt
- 没有空间
- 双破折号分开,使每件容易看到
- 只有一个标点符号(短划线)可以很容易地input
- 没有时区,因为我一直在我当地的时区工作。 如果我需要一个我会去UTC并追加“
--UTC
”时间过后。
我会使用YYYY-MM-DD HHmmss
作为文件名,除非特别需要时区或可能需要将它们parsing为ISOdate; 在这些情况下,ISOdate可能是可取的。
编辑:时区不应该永远是必需的; 以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(); }
它需要一个date和描述。 让我们用“我喜欢狗”。 结果是:
ILikeDogs_1999-09-23_18-42
是否需要时间戳是人类可读的? 如果没有,你可以使用DateTime.Ticks.ToString() 。 非常准确,可sorting,没有特殊字符。
我使用unix时间戳,例如。 从时代开始有多less秒钟。 UTC中的所有时间。 但是,如果你愿意,可以猜测你可以在时区数据前缀。
通常我使用yyyymmdd。 如果需要进一步的精确度,则更改为yyyymmddhhmmss