你最喜欢的文件名中的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