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

时间:2015-05-28 16:20:24

标签: c# regex date

我有以下字符串

\\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失败,说字符串不包含日期。

那我怎么做转换?

2 个答案:

答案 0 :(得分:4)

使用以下格式:

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

总是很好地为Custom Date and Time Format Strings页面添加书签!

答案 1 :(得分:3)

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

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...
}

同时将小时匹配更改为@Jonesy标识的24小时(HH