2011-09-13 47 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();