可以在文件名或扩展名中使用的DateTime.ToString()格式?

pdi*_*izz 91 c# filenames datetime datetime-format

我想在创建文件时为文件名添加时间戳,但我尝试使用空格和斜杠输出大多数DateTime方法.例如:

Debug.WriteLine(DateTime.Now.ToString()); // <-- 9/19/2012 1:41:46 PM
Debug.WriteLine(DateTime.Now.ToShortTimeString()); // <-- 1:41 PM
Debug.WriteLine(DateTime.Now.ToShortDateString()); // <-- 9/19/2012
Debug.WriteLine(DateTime.Now.ToFileTime()); // <-- 129925501061462806
Run Code Online (Sandbox Code Playgroud)

ToFileTime()有效但不完全是人类可读的.如何将输出格式化为人类可读的时间戳,其中包含可在文件名或扩展名中使用的日期和时间?喜欢这样的东西2011-19-9--13-45-30

Kri*_*aes 162

你可以用这个:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
Run Code Online (Sandbox Code Playgroud)

  • 你是否真的建议在一年到一月之间度过一天? (74认同)
  • 因此,在发现 Kubernetes 集群中运行的第三方 Pod 不断写入名为“2022-31-1--13-37-42.txt”的文件直到磁盘空间耗尽后,我们找到了解决办法。我们得出的结论是,这种非正统的日期格式只是_had_在 pod 的源代码中明确指定,而且果然:罪魁祸首行使用了上面的确切表达式。事实证明,这个答案是 Google 上“日期格式文件名 dotnet”和类似查询的最高结果,因此,如果它作为蜜罐提交以公开复制粘贴编程,那就玩得好! (8认同)
  • 由于文件列表无法按名称排序以使其按日期时间顺序排序,因此文件名中更不可原谅.最重要到最不重要的应该是一天的顺序. (7认同)
  • 您可以在这里查看更多示例/选项:http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm (5认同)
  • @Matt - 您假设文件名与创建/修改/访问日期相关,并非总是如此. (4认同)
  • @Matt现在获取该文件,将其复制到USB记忆棒以传输到其他地方,然后再次检查该元数据(除了Bernhard正在谈论的明显问题之外:您可能会为“现在”以外的日期创建一个文件)。将其作为最高支持和接受的答案是非常愚蠢的。 (4认同)
  • 我想考虑 utc 时间会更好 (2认同)

Chr*_*tte 103

我会使用ISO 8601格式,没有分隔符:

DateTime.Now.ToString("yyyyMMddTHHmmss")
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用`DateTime.Now.ToString("o")`,它会给你`yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm`(其中最后的小时和分钟偏移是+/- GMT ).当然,这不会作为文件名格式,但"o"格式很好知道. (6认同)
  • 也可以使用字符串插值将其写为 `$"{DateTime.Now:yyyyMMddTHHmmss}"`。 (4认同)
  • [RFC 3339](https://tools.ietf.org/html/rfc3339#section-5.6) 表示您应该保留日期的破折号。`DateTime.Now.ToString("s").Replace(":", "")` (2认同)

小智 13

我有类似的情况,但我想要一致的方式,以便能够使用文件名中的DateTime.Parse,所以我去了

DateTime.Now.ToString("s").Replace(":", ".") // <-- 2016-10-25T16.50.35
Run Code Online (Sandbox Code Playgroud)

当我想解析时,我可以简单地反转Replace调用.这样我就不必输入任何yymmdd内容或猜测DateTime.Parse允许的格式.


Chi*_*eet 8

使用插值字符串和格式说明符

var filename = $"{DateTime.Now:yyyy.dd.M HH-mm-ss}"
Run Code Online (Sandbox Code Playgroud)

2020 年 1 月 1 日上午 10:40:45 的示例输出:

2020.28.01 10-40-45


或者,如果您想要标准日期格式:

var filename = $"{DateTime.Now:yyyy.M.dd HH-mm-ss}"
Run Code Online (Sandbox Code Playgroud)

2020年1月28日 10-40-45


注意:此功能在 C# 6 及更高版本的语言中可用。


Agh*_*oub 6

你可以尝试使用

var result = DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");
Run Code Online (Sandbox Code Playgroud)


Raj*_*dev 6

以下是最常用的时间格式说明符列表。

DD -月的,从01到31。

MM -月份,从01到12。

yyyy-为四位数。

hh - hour,使用从 12到12的时钟,从01到12。

毫米 -分钟,从00到59。

SS -第二,从00至59。

HH -小时,使用 24小时时钟从00到23。

tt - AM / PM指示符。

使用上述方法,您将能够为文件名形成唯一的名称。

在这里我提供了例子

string fileName = "fileName_" + DateTime.Now.ToString("MM-dd-yyyy_hh-mm-ss-tt") + ".pdf";
Run Code Online (Sandbox Code Playgroud)

要么

如果您不想使用符号,也可以尝试使用此符号。

string fileName = "fileName_" + DateTime.Now.ToString("MMddyyyyhhmmsstt") + ".pdf";
Run Code Online (Sandbox Code Playgroud)

希望这对现在或将来的人有所帮助。:)


Cha*_*ton 5

我个人喜欢这样:

DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")
Run Code Online (Sandbox Code Playgroud)

因为它区分了日期和时间.

  • 虽然这是有效的,但文件名/路径中包含空格通常不是最好的,因为它可能会在没有考虑到这一点的软件中引入问题,并且命令行中的路径不包含引号。有一个下划线或两个破折号是更好的做法。 (4认同)
  • 我猜你的意思是“yyyy-MM-dd HH.mm.ss” (2认同)