从字符串中提取yyyy-MM-dd hhmmss格式的日期

本文关键字:格式 日期 hhmmss yyyy-MM-dd 字符串 提取 | 更新日期: 2023-09-27 17:50:59

我有以下字符串

''server'f$'direct1'205486060518032015-05-28 150931.rtf

包含yyyy-MM-dd hhmmss

格式的日期

现在我已经设法使用正则表达式

提取该字符串
Regex rgx = new Regex(@"'d{4}-'d{2}-'d{2} 'd{6}");
di = new DirectoryInfo(Location);
var fileList = di.GetFiles("*.*", SearchOption.TopDirectoryOnly);
foreach (FileInfo fi in fileList)
{
     EngineEvent(this, new EngineEventProperties(String.Format("Filename: {0}", fi.FullName)));
     DateTime fileDate = DateTime.Now;
     Match mat = rgx.Match(fi.FullName);
.
.
.
}

匹配包含预期字符串'2015-05-28 150931'

但是,当我尝试使用以下代码将其转换为DateTime

if (DateTime.TryParseExact(fi.FullName, "yyyy-MM-dd hhmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out fileDate))
{
     Console.WriteLine("Date : {0}", fileDate);
};

返回false,使用ParseExact失败,说明字符串不包含日期。

那么如何进行转换呢?

从字符串中提取yyyy-MM-dd hhmmss格式的日期

使用此格式:

"yyyy-MM-dd HHmmss"

HH为24小时格式,hh为12小时格式。15不适合12小时的时间格式,因此失败。

给它一个机会:

DateTime temp;
if (DateTime.TryParseExact("2015-05-28 150931", "yyyy-MM-dd HHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out temp))
{
     Console.WriteLine("Date : {0}", temp);
};

总是好的书签自定义日期和时间格式字符串页面!

您正在尝试解析全名,而不仅仅是匹配的部分。试着

Match mat = rgx.Match(fi.FullName);
if (mat.success)
{
    if (DateTime.TryParseExact(mat.Value, "yyyy-MM-dd HHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out fileDate))
    {
         Console.WriteLine("Date : {0}", fileDate);
    };
}
else
{
    // no natch found...
}

还将小时匹配更改为24小时(HH),由@Jonesy

标识