2011-09-13 64 views
0

嗨,我是试图建立一个实用程序来管理大集备份的的:解析日期时间从文件名

我有我的备份结构类似:

D:\SQLBACKUP\NOFAULT2010\Datatbase\LOG\NOFAULT2010_Datatbase_LOG_20110906_182000.trn 
D:\SQLBACKUP\NOFAULT2010\Datatbase\LOG\NOFAULT2010_Database_LOG_20110906_183000.trn 

我可以很容易地摆脱静态部分的足够的

Replace(@"D:\SQLBACKUP\NOFAULT2010\Datatbase\LOG\NOFAULT2010_Datatbase_LOG_", "").Replace(".trn", ""); 

我怎样才能一致地解析这部分20110906_182000 ...我接受任何其他建议。谢谢今天我的大脑正在度假,事情很糟糕。

+0

未来Google员工的链接。 http://stackoverflow.com/questions/3749516/using-a-datetime-as-filename-and-parse-the-filename-afterwards –

回答

4

您可以使用Substring()解析小时,分钟,秒等,然后使用new DateTime()创建日期类的实例。

一种替代方法是使用DateTime.TryParseExact()(http://msdn.microsoft.com/en-us/library/ms131044.aspx)

+0

Duh,!哇,我今天在轨道上,谢谢你...将标记为答案 –

+0

还有'.ParseExact()'我相信引发异常 - 如果这是你的目标。 – Leon

1

只需提取文件名的日期时间和部分解析它。

var path = @"D:\SQLBACKUP\NOFAULT2010\Datatbase\LOG\NOFAULT2010_Datatbase_LOG_20110906_182000.trn"; 
var filename = Path.GetFileNameWithoutExtension(path); 
        // assuming you have a consistent format with a fixed length 
var datetimePart = filename.Substring(filename.Length - 15); 
var datetime = DateTime.ParseExact(
    datetimePart, "yyyyMMdd_HHmmss", System.Globalization.CultureInfo.InvariantCulture); 

P.S.,当与路径字符串的工作,始终使用System.IO.Path类来操纵它们。不要使用常规字符串操作技术。

+0

我要和这个一起乱搞,谢谢你们......! –

0

对于你的情况,你实际上并不需要使用子字符串或字符串解析。

 DateTime parsedFileDate; 

     string FileFullPath = @"D:\SQLBACKUP\NOFAULT2010\Datatbase\LOG\NOFAULT2010_Database_LOG_20110906_183000.trn"; 
     string FileNameFormat = "'NOFAULT2010_Database_LOG_'yyyyMMdd_HHmmss'.trn'"; 

     DateTime.TryParseExact(Path.GetFileName(FileFullPath), FileNameFormat, null, System.Globalization.DateTimeStyles.None, out parsedFileDate); 

     Console.WriteLine($"Parsed date: {parsedFileDate}"); 

     Console.ReadLine();