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