【问题标题】:Using a datetime as filename and parse the filename afterwards?使用日期时间作为文件名并在之后解析文件名?
【发布时间】:2010-09-20 07:50:22
【问题描述】:

我正在向我的硬盘写入文件,文件名是这样构建的:

String.Format("{0:yyyy-MM-dd_hh-mm-ss}.txt", DateTime.Now)

例如,文件名是“2010-09-20_09-47-04.txt”。现在我想在下拉列表中显示这些文件名,但使用另一种格式。格式应为 dd.MM.yyyy HH:mm:ss。我该怎么做,或者有更好的方法吗?

谢谢:)

【问题讨论】:

    标签: c# datetime file-io datetime-format


    【解决方案1】:

    我在控制台上试过这个,它成功了。

    Imports System.Globalization
    Module Module1
    
    Sub Main()
        Dim enUS As New CultureInfo("en-US")
        Dim d As String = Format(DateTime.Now, "yyyy-MM-dd_hh-mm-ss")
        Dim da As Date = DateTime.ParseExact(d, "yyyy-MM-dd_hh-mm-ss", enUS)
        Console.WriteLine("Date from filename: {0}", d)
        Console.WriteLine("Date formated as date: {0}", Format(da, "dd.MM.yyyy HH:mm:ss"))
    
    End Sub
    End Module
    

    希望对你有帮助。

    【讨论】:

    • 如果您想要 24 小时制,请将 hh 部分大写。
    【解决方案2】:

    您可以使用 DateTime.ParseExact 与用于构建名称的相同格式将文件名解析为 DateTime 对象,然后使用 ToString 将其转换为所需格式

    【讨论】:

    • 这是个好主意。或者,TryParseExact 可能是一个好主意,除非你真的想在这里失败。
    • Parse/ParseExact 似乎不适用于我的格式...我也需要时间。
    • @grady - ParseExact 也应该返回时间。
    【解决方案3】:

    您可以将其解析回DateTime,然后将其格式化为您的显示格式。

    【讨论】:

      【解决方案4】:
      string FileName = "2010-09-20_09-47-04";
      DateTime dt = new DateTime();
      dt = DateTime.Parse(FileName.Substring(0, 10));
      dt.ToString("dd.MM.yyyy");
      

      【讨论】:

      • 感谢示例代码,但 Giorgi 关于ParseExact 的建议是正确的。
      • @Steven - 是的,TryParseExact 让我忘记了。那将是一个更好的选择。谢谢
      • ParseExactTryParseExact 如果输入的有效日期采用意外格式,则会失败。但是,您要使用这两者中的哪一个将取决于是否抛出异常是处理该故障的最佳方法。
      【解决方案5】:

      您可以使用正则表达式解析您的文件名:

      Regex r = new Regex("(\d{4})-(\d{2})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2}).txt");
      Match m = r.Match(fileName);
      

      更新:其他人提出的 DateTime.Parse 方法更合适。

      由于您使用的是日期,您可能要考虑改用文件的创建日期或修改日期?

      FileInfo f = new FileInfo(fileName);
      string title = String.Format("{0:dd.MM.yyyy}", f.CreationTime);
      

      【讨论】:

      • 我们需要一个保护正则表达式的协会,以保护他们免受这种滥用。 ;-)
      • 好吧,我不会认为这是滥用,如果您假设您有一个字符串作为输入并且需要解析它以获取日期。只是 DateTime 已经提供了它。谁知道他们是否在幕后使用 Regex?
      • 他们没有。但即使他们这样做了,那也不是我们这样做的好理由。 :-)
      猜你喜欢
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 2016-09-07
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      相关资源
      最近更新 更多