从FileName解析DateTime

时间:2011-09-13 21:04:41

标签: c#

您好我正在尝试开发一个实用程序来管理大量备份:

我的备份结构如下:

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 ...我对任何其他建议持开放态度。谢谢我的大脑今天正在度假,有些可怕。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

只需提取文件名的DateTime部分并解析它。

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类来操作它们。不要使用常规的字符串操作技术。

答案 2 :(得分: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();