使用ParseExact从Filename获取日期

时间:2016-11-10 18:08:28

标签: c# string

我正在尝试在单个目录中找到具有最高日期的文件。问题是日期附加到文件名。我正在使用以下代码来尝试拉出最大日期,但是我遇到了ParseExact的问题。

//Gather all of the files in the local directory
var files = Directory.EnumerateFiles(r.getLeadLocalFile());
returnDateTime = files.Max(f => DateTime.ParseExact(f, "MMddyyXXXX.csv", CultureInfo.InvariantCulture));

我继续收到以下错误:

String was not recognized as a valid DateTime.

我可以说传入文件路径的值是因为' f'如下:

\\\\vamarnas02\\users\\meggleston\\User Files\\Leads\\110716ENH9.csv

ENH9的值可能会根据文件而改变。

如何从文件名中获取DateTime?

4 个答案:

答案 0 :(得分:2)

这是另一种方法。不需要拆分任何东西。但是一个糟糕的文件名(与你当前的方法一样)会破坏它:

//Gather all of the files in the local directory
var files = new DirectoryInfo(r.getLeadLocalFile()).GetFiles("*.csv");
returnDateTime = files.Max(f => DateTime.ParseExact(f.Name.Substring(0, 6), "MMddyy", CultureInfo.InvariantCulture));

答案 1 :(得分:0)

尝试仅传递文件名“110716ENH9.csv”而不是文件的完整路径。

来自MSDN DateTime.ParseExact Documentation

  

使用指定的格式和特定​​于文化的格式信息,将指定的日期和时间字符串表示形式转换为其DateTime等效形式。字符串表示的格式必须与指定的格式完全匹配。

根据您提供的内容,您的格式不完全匹配。

- 只将文件名的前6个字符传递给ParseExact函数,并将格式修改为“MMddyy”。

答案 2 :(得分:0)

您需要在解析之前拆分日期文本。以下代码段应该有所帮助。

假设变量f是文件名。

DateTime.ParseExact(f.Substring( f.LastIndexOf("\\") + 1,  6), "MMddyy", CultureInfo.InvariantCulture);

答案 3 :(得分:0)

你真的需要在这里使用ParseExact吗?因为看起来您只需要获取Int32值并在之后比较它们 另一种方法是:您可以从提供的路径中使用一些正则表达式提取日期部分。例如,你可以使用这个:

\\

然后修剪private string ExtractDateFromFilename(string filename) { var m = Regex.Match(filename, @"\\\d{6}"); if (!string.IsNullOrEmpty(m.Value)) return m.Value.Substring(1); return ""; } 部分。所以在循环中这样的事情:

{{1}}