C# 从文件名解析日期时间

C# 从文件名解析日期时间,c#,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\NOFAULT

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

我的备份结构如下:

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", "");

如何始终如一地解析此部分20110906182000。。。我愿意接受任何其他建议。谢谢,我的大脑今天休假了,真糟糕

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


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

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


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

只需提取文件名的日期时间部分并对其进行解析即可

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、 在处理路径字符串时,始终使用类来操作它们。不要使用常规的字符串操作技术。

只需提取文件名的日期时间部分并对其进行解析即可

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、 在处理路径字符串时,始终使用类来操作它们。不要使用常规的字符串操作技术。

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

        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();

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

        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();

嗯!!哇我今天在轨道上谢谢你。。。将标记为答案还有
.ParseExact()
,我相信这会引发一个异常-如果这是你的目标的话!哇我今天在轨道上谢谢你。。。也有
.ParseExact()
,我相信这会引发一个例外——如果这是你的目标的话。未来谷歌的链接。