从文件名解析DateTime
本文关键字:DateTime 文件名 | 更新日期: 2023-09-27 18:08:25
你好,我正在尝试开发一个实用程序来管理大型备份集:
我的备份结构如下:
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…我愿意接受任何其他建议。谢谢,我的大脑今天休假了,很糟糕。
您可以使用Substring()解析出小时,分钟,秒等,然后使用new DateTime()
创建日期类的实例。
另一种选择是使用DateTime.TryParseExact()
(http://msdn.microsoft.com/en-us/library/ms131044.aspx)
提取文件名的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);
注。当使用路径字符串时,总是使用System.IO.Path
类来操作它们。不要使用常规的字符串操作技术。
对于您的情况,实际上不需要使用子字符串或字符串解析。
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();