C# 有没有一种方法可以尝试从文件名中猜测日期,如果无法猜到,则会以优雅的方式失败?

C# 有没有一种方法可以尝试从文件名中猜测日期,如果无法猜到,则会以优雅的方式失败?,c#,winforms,datetime,datepicker,C#,Winforms,Datetime,Datepicker,我想尝试(以编程方式)猜测文件的创建日期。它的名字叫BlaBla.2012-06-04.xlw,我猜它是2012年6月4日创建的 但是,如果文件名为其他名称,如SitOnA.PotatoPanOtis.pal,我希望能够简单地放弃(不需要尝试转换为日期时间而导致异常),并为用户提供一个日期时间选择器 可行吗 我有这个密码: String substr = SelectedFileName.Substring(DATE_BEGIN_POS, DATE_LENGTH); return DateTim

我想尝试(以编程方式)猜测文件的创建日期。它的名字叫BlaBla.2012-06-04.xlw,我猜它是2012年6月4日创建的

但是,如果文件名为其他名称,如SitOnA.PotatoPanOtis.pal,我希望能够简单地放弃(不需要尝试转换为日期时间而导致异常),并为用户提供一个日期时间选择器

可行吗

我有这个密码:

String substr = SelectedFileName.Substring(DATE_BEGIN_POS, DATE_LENGTH);
return DateTime.Parse(substr);
我在想这样的事情是有道理的:

try 
{
    String substr = SelectedFileName.Substring(DATE_BEGIN_POS, DATE_LENGTH);
    return DateTime.Parse(substr);
}
catch (ConversionException ce) 
{
    //Show form with DateTimePicker
}
更新 这似乎应该是可行的:

DateTime dt;
if (!(DateTime.TryParse(substr, out dt))) {
   . . .

您可以使用
文件.GetCreationTime
直接询问创建时间,或者如果您试图通过文件名猜测,则可以使用日期,如果不起作用(方法返回false)然后显示对话框。

您可以使用
文件.GetCreationTime直接询问创建时间,或者如果您试图通过文件名猜测,则可以使用日期,如果不起作用(方法返回false),则显示对话框。

不要猜测。明白了

var creationTime = File.GetCreationTime(@"c:\myfile.txt");
别猜了。明白了

var creationTime = File.GetCreationTime(@"c:\myfile.txt");

使用正则表达式匹配文件名

Regex r = new Regex("\d{4}-\d{2}-\d{2}");
if (r.Match(fileName).Success) {
    //GUESS!
}

使用正则表达式匹配文件名

Regex r = new Regex("\d{4}-\d{2}-\d{2}");
if (r.Match(fileName).Success) {
    //GUESS!
}

根据这一点,我无法从我检索的文件中知道日期时间。根据这一点,我无法从我检索的文件中知道日期时间。即使顺序不同,例如“06-04-2012”而不是“2012-06-04”,这是否有效?然后必须更改正则表达式模式。模式(\d{4}-\d{2}-\d{2})|(\d{2}-\d{2}-\d{4})将匹配这两种日期格式。除非您永远无法确定它是dd-mm-yyyyy还是mm-dd-yyyyyy,否则即使顺序不同,例如“06-04-2012”而不是“2012-06-04”?您也必须更改正则表达式模式。模式(\d{4}-\d{2}-\d{2})|(\d{2}-\d{2}-\d{4})将匹配这两种日期格式。除非您永远无法确定它是dd-mm-yyyy还是mm-dd-yyyy