109

这是一个有点主观的问题,在大计划中不是很重要,但经常让我烦恼。似乎没有不言而喻的方法可以在文件名中添加时间戳

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

另一件事是您应该很容易看到使用的是通用时间还是本地时间。实际上,用户似乎更喜欢当地时间而不是世界时间。

我大多最终使用具有基本时间格式的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”,以防止猜测和错误。

朱利安日期和其他星历很酷,因为使用公历的日期算术是脑死的。

4

6 回答 6

73

我用这个:

My-File--2009-12-31--23-59-59.txt
  • 没有空间
  • 双破折号将各个部分分开,使每个部分都易于查看
  • 只有一个标点符号(破折号),便于输入
  • 没有时区,因为对我来说,我总是在当地时区工作;如果我需要一个,我会使用 UTC 并--UTC在时间后附加“”。
于 2009-08-08T12:45:26.880 回答
17

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

编辑:不应该真的需要时区;以 UTC 保存所有内容并让人们知道这都是 UTC 比指定所有内容的时区更有效。

于 2009-08-08T12:29:18.817 回答
11

这是我使用的:

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();
}

它需要一个日期和描述。让我们使用"I like DOGS". 结果是:

ILikeDogs_1999-09-23_18-42
于 2013-01-23T15:50:43.530 回答
3

时间戳是否需要人类可读?如果没有,你可以只使用DateTime.Ticks.ToString(). 非常准确,可排序且没有特殊字符。

于 2009-08-08T14:27:07.340 回答
1

我使用 unix 时间戳,例如。从纪元过去了多少秒。UTC 时间。但是,如果您愿意,可以猜测您可以在前缀 w/ 时区数据。

于 2009-08-08T14:10:46.337 回答
1

通常我使用 yyyymmdd。如果需要进一步的精度,它会更改为 yyyymmddhhmmss

于 2009-08-08T12:54:44.243 回答